時序電路verilog設(shè)計代碼

例題:設(shè)計一個異步清0,同步時鐘使能和異步數(shù)據(jù)加載型8位二進制加法計數(shù)器。

1.異步清0是當rst信號變化時(上升沿或下降沿)計數(shù)器直接清0,而不是等到下一個時鐘信號來的時候才清0。清0操作不受時鐘信號影響。
2.同步時鐘使能是操作受時鐘信號影響。
3.異步數(shù)據(jù)加載是當load信號變化時(上升沿或下降沿),將預(yù)設(shè)數(shù)據(jù)加載到計數(shù)器中,而不是等到下一個時鐘信號來的時候才加載到計數(shù)器中。加載操作也不受時鐘影響。

核心模塊代碼:
module CNT8 (CLK,RST,EN,LOAD,COUT,DOUT,DATA);
input CLK,EN,RST,LOAD;  
input[7:0] DATA; 
output[7:0] DOUT;  
output COUT;  
reg[7:0] Q1;  
reg COUT;
assign DOUT = Q1;   
always@(posedge CLK or negedge RST or negedge LOAD) 
begin
if (!RST)  Q1<= 0; 
else if (!LOAD) Q1<=DATA;    
else if (EN) begin
     if (Q1<255) Q1<=Q1+1;  
     else Q1 <= 8'b00000000;   
end
end
always@(Q1)
if (Q1==8'hFF) COUT=1'b1;
else  COUT =1'b0;
endmodule
核心模塊RTL View的網(wǎng)表圖
測試模塊代碼:
module testCNT8;
reg CLK,EN,RST,LOAD;  
reg [7:0] DATA; 
wire [7:0] DOUT;  
wire COUT;
CNT8 testit(CLK,RST,EN,LOAD,COUT,DOUT,DATA);

//設(shè)置時鐘信號
initial
CLK=0;
always
#5 CLK=~CLK;

//設(shè)置其他信號變化
initial
begin
RST=0;LOAD=1;EN=1;DATA=8'h11;
#20 RST=1;
#50 LOAD=0;
#5 LOAD=1;
#50 $finish;
end

endmodule
仿真波形:
仿真波形圖
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容