例題:設(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
仿真波形:

仿真波形圖