41?下降沿觸發(fā)的寄存器
題目描述
在時(shí)序邏輯電路中,敏感變量不但可以是觸發(fā)信號(hào)的上升沿(posedge
),也可以是下降沿(negedge
),試創(chuàng)建 8bit 位寬的寄存器,所有 DFF 都應(yīng)該由 clk 的下降沿(負(fù)邊緣)觸發(fā)。同時(shí)采用高電平有效的同步復(fù)位方式,復(fù)位值為 0x34
而不是零。
輸入格式
輸入信號(hào) clk,時(shí)鐘信號(hào)。 輸入信號(hào) reset,復(fù)位信號(hào),高電平有效(復(fù)位)。 輸入信號(hào) d,位寬 8bit,任意數(shù)據(jù)信號(hào)。
輸出格式
輸出信號(hào) q,位寬 8bit,在時(shí)鐘下降沿取輸入信號(hào) d 的值,若復(fù)位信號(hào)有效則復(fù)位為值 0x34,復(fù)位方式為同步復(fù)位。
module top_module (
input clk ,
input reset ,
input [7:0] d ,
output reg [7:0] q
);
// Write your code here
always @(negedge clk) begin
if(reset) begin
q <= 8'h34;
end else begin
q <= d;
end
end
endmodule
42?異步復(fù)位的寄存器
題目描述
在前面的例子中,復(fù)位信號(hào)只能在觸發(fā)信號(hào)的觸發(fā)邊沿才能起作用,也就是說(shuō)如果沒(méi)有觸發(fā)邊沿就無(wú)法對(duì)電路復(fù)位,這大大限制了復(fù)位的功能,因此還有一種經(jīng)常使用的復(fù)位方式,稱為異步復(fù)位。
為了使復(fù)位信號(hào)不依賴于時(shí)鐘邊沿,則復(fù)位信號(hào)也應(yīng)該放在always進(jìn)程塊的敏感變量列表中。復(fù)位信號(hào)高電平有效和低電平有效在編碼時(shí)稍有不同,對(duì)于高電平有效的復(fù)位信號(hào)來(lái)說(shuō),可以寫成如下形式:
always@(posedge clk or posedge reset)
begin
if(reset) …
else …
end
如果是低電平有效的復(fù)位信號(hào),則應(yīng)寫成如下形式:
always@(posedge clk or negedge reset)
begin
if(~reset) …
else …
end
試創(chuàng)建Verilog模塊,實(shí)現(xiàn)一個(gè)時(shí)鐘上升沿觸發(fā)的,支持高電平有效的異步復(fù)位功能的8bit寄存器,寄存器復(fù)位值為0。
輸入格式
2個(gè) 1bit 位寬的信號(hào) clk、areset 1個(gè) 8bit 位寬的信號(hào) d
輸出格式
1個(gè) 8bit 位寬的信號(hào) q
module top_module (
input clk,
input areset, // active high asynchronous reset
input [7:0] d,
output reg [7:0] q
);
// Write your code here
always@(posedge clk or posedge areset)
begin
if(areset) q <= 8'b0;
else q <= d;
end
endmodule
43?帶使能的寄存器
題目描述
在前面的電路中,寄存器輸出端 q 在每個(gè)時(shí)鐘的上升沿都會(huì)更新一次,但有時(shí)候我們可能需要使輸出端保持不變,這時(shí)就需要加入使能信號(hào),創(chuàng)建一 16bit 位寬(2byte)的寄存器,其中每字節(jié)都由一個(gè)使能信號(hào)控制,使能為 0 時(shí),輸出保持不變,使能為 1 時(shí)更新 q。時(shí)鐘上升沿觸發(fā),同步復(fù)位,復(fù)位低電平有效,復(fù)位值為 0。
輸入格式
任意有效的 16bit 位寬數(shù)據(jù)
輸出格式
每個(gè)字節(jié)都由一個(gè)使能信號(hào)控制:使能為0時(shí)輸出保持不變,使能為1時(shí)更新q
module top_module(
input clk,
input resetn,
input [1:0] byteena,
input [15:0] d,
output reg [15:0] q
);
always @(posedge clk) begin
if (~resetn)
q <= 16'd0;
else
case(byteena)
2'b11 : q <= d;
2'b10 : q[15:8] <= d[15:8]; //byteena[1] 控制上字節(jié) d[15:8]
2'b01 : q[7:0] <= d[7:0]; //byteena[0] 控制下字節(jié) d[7:0]
default : q <= q;
endcase
end
endmodule
44?觸發(fā)器+邏輯門
題目描述
編寫verilog代碼,實(shí)現(xiàn)下圖所示的電路功能
輸入格式
1
輸出格式
1
module top_module (
input clk,
input in,
output reg out);
//your code
wire res;
assign res = in ^ out;
always @(posedge clk) begin
out <= res;
end
endmodule
45?寄存器+邏輯門
題目描述
編寫Verilog代碼,實(shí)現(xiàn)下圖所示的電路功能,假設(shè)所有D觸發(fā)器的初始復(fù)位值為0
輸入格式
clk,x
輸出格式
z文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-820169.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-820169.html
module top_module (
input clk,
input x,
output z
);
reg Q1=0,Q2=0,Q3=0;
wire D1,D2,D3;
assign D1 = x ^ Q1;
assign D2 = x & ~Q2;
assign D3 = x | ~Q3;
always @(posedge clk) begin
Q1 <= D1;
Q2 <= D2;
Q3 <= D3;
end
assign z = ~(Q1|Q2|Q3);
endmodule
到了這里,關(guān)于【USTC】verilog 習(xí)題練習(xí) 41-45的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!