时序电路verilog设计代码

例题:设计一个异步清0,同步时钟使能和异步数据加载型8位二进制加法计数器。

1.异步清0是当rst信号变化时(上升沿或下降沿)计数器直接清0,而不是等到下一个时钟信号来的时候才清0。清0操作不受时钟信号影响。
2.同步时钟使能是操作受时钟信号影响。
3.异步数据加载是当load信号变化时(上升沿或下降沿),将预设数据加载到计数器中,而不是等到下一个时钟信号来的时候才加载到计数器中。加载操作也不受时钟影响。

核心模块代码:
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的网表图
测试模块代码:
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);

//设置时钟信号
initial
CLK=0;
always
#5 CLK=~CLK;

//设置其他信号变化
initial
begin
RST=0;LOAD=1;EN=1;DATA=8'h11;
#20 RST=1;
#50 LOAD=0;
#5 LOAD=1;
#50 $finish;
end

endmodule
仿真波形:
仿真波形图
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容