各位好我是Toporanger? 本人只會寫代碼 不會教人 畢竟自己的代碼也是改來改去最終成功的 如果有不夠精簡的地方還請見諒?
我會先貼下代碼 然后貼上管腳的綁定圖? 無論是拿來救急還是作為參考都希望幫助到你們
題目:
1.?用Verilog HDL設(shè)計(jì)一個3-8譯碼器74LS138,并用該譯碼器實(shí)現(xiàn)全加器。要求:調(diào)試通過,直接貼代碼也可。
2.?用Verilog HDL設(shè)計(jì)一個七段顯示譯碼器,該譯碼器輸入為BCD碼,輸出驅(qū)動七段數(shù)碼管。要求:將七段顯示譯碼器封裝為模塊,然后在頂層模塊調(diào)用該譯碼器驅(qū)動七段數(shù)碼管,并在開發(fā)板上驗(yàn)證通過,直接貼代碼也可。
頂層模塊:
// 模塊 hw_7: 根據(jù)輸入按鍵控制LED燈的亮滅,并通過加法器和7段顯示模塊展示計(jì)算結(jié)果
module hw_7(
input clk, rst, // 輸入信號:時鐘(clk)和復(fù)位(rst)
input key1, key2, key3, key4, // 輸入按鍵,用于控制操作
output reg si_led, ci_led, // 輸出信號:單個LED指示燈(si_led, ci_led)用于顯示加法器的結(jié)果
output [8:0] seg_led, // 7段顯示的輸出
output reg [2:0] led // LED燈組,通過按鍵控制亮滅
);
wire siled; // 加法器的和輸出信號
wire ciled; // 加法器的進(jìn)位輸出信號
// 時鐘上升沿觸發(fā)的always塊
always @(posedge clk) begin
if (!rst) begin
// 如果復(fù)位信號激活,則將所有LED設(shè)置為預(yù)定初始狀態(tài)
led[0] <= 1'b1; // 初始狀態(tài),所有LED燈亮
led[1] <= 1'b1;
led[2] <= 1'b1;
si_led <= 1'b1; // 加法結(jié)果和進(jìn)位結(jié)果LED初始化為亮
ci_led <= 1'b1;
end else begin
// 根據(jù)按鍵狀態(tài)更新LED燈
led[2] <= key1; // key1控制led[2]
led[1] <= key2; // key2控制led[1]
led[0] <= key3; // key3控制led[0]
si_led <= ~siled; // 反轉(zhuǎn)加法器的和輸出,用于控制si_led
ci_led <= ~ciled; // 反轉(zhuǎn)加法器的進(jìn)位輸出,用于控制ci_led
end
end
// 加法器模塊實(shí)例化
adder_ m1(
.a(led), // 將led作為加法器的輸入
.g1(1'b1), .g2(1'b0), .g3(1'b0), // 控制信號
.si(siled), // 和輸出連接到siled
.ci(ciled) // 進(jìn)位輸出連接到ciled
);
// 7段顯示模塊實(shí)例化
segment m2(
.bcd({key1, key2, key3, key4}), // 將按鍵狀態(tài)作為輸入
.seg_led(seg_led) // 連接到7段顯示的輸出
);
endmodule
74LS138譯碼器:
module sl138(
input g1, g2, g3, // 地址選通端口,控制譯碼器是否激活
input [2:0] a, // 3位輸入地址,決定哪一位輸出應(yīng)該被激活
output reg [7:0] y // 8位輸出,每一位對應(yīng)一個輸出線
);
// 初始化輸出為全高電平
reg [7:0] y = 0;
// 監(jiān)聽選通端口和地址輸入的變化
always @(g1 or g2 or g3 or a) begin
// 當(dāng)選通條件滿足時(g1高,g2和g3低)
if (g1 && ~g2 && ~g3) begin
case (a) // 根據(jù)輸入地址a選擇輸出
// 每種情況下激活對應(yīng)的輸出線,使其變?yōu)榈碗娖? 7: y = 8'b01111111; // 激活第7位
6: y = 8'b10111111; // 激活第6位
5: y = 8'b11011111; // 激活第5位
4: y = 8'b11101111; // 激活第4位
3: y = 8'b11110111; // 激活第3位
2: y = 8'b11111011; // 激活第2位
1: y = 8'b11111101; // 激活第1位
0: y = 8'b11111110; // 激活第0位
// 如果地址不在0到7之間,則所有輸出保持高電平
default: y = 8'b11111111;
endcase
end else begin
// 如果選通條件不滿足,則所有輸出保持高電平
y = 8'b11111111;
end
end
endmodule
全加器:
// 模塊 adder_: 通過調(diào)用3到8線譯碼器實(shí)現(xiàn)特定的加法邏輯
module adder_(
input [2:0] a, // 輸入a,假定同時代表了加法器的兩個加數(shù)和一個進(jìn)位輸入
input g1, g2, g3, // 譯碼器的控制輸入
output si, ci // 加法器的和(si)和進(jìn)位(ci)輸出
);
wire [7:0] m; // 譯碼器的8位輸出
// 實(shí)例化3到8線譯碼器 sl138
sl138 u1(
.g1(g1),
.g2(g2),
.g3(g3),
.a(a),
.y(m) // 連接譯碼器的輸出到m
);
// 根據(jù)譯碼器的輸出計(jì)算加法器的和和進(jìn)位
assign si = ~m[1] | ~m[2] | ~m[4] | ~m[7]; // 和輸出的邏輯表達(dá)式
assign ci = ~m[3] | ~m[5] | ~m[6] | ~m[7]; // 進(jìn)位輸出的邏輯表達(dá)式
endmodule
?文章來源:http://www.zghlxwxcb.cn/news/detail-855223.html
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?管腳圖文章來源地址http://www.zghlxwxcb.cn/news/detail-855223.html
到了這里,關(guān)于北郵數(shù)電實(shí)驗(yàn)作業(yè)參考 #利用74LS138實(shí)現(xiàn)全加器的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!