一、组合逻辑
二、译码器
三、半加器
四、层次化设计
五、避免Latch的产生
六、寄存器
可以用下面D触发器的概念来学习非阻塞赋值<=
后面加n表示低电平有效:
同步复位和异步复位:
组合逻辑和时序逻辑采集信号的方式:
最终的结果:
verilog代码:
//2023/4/9 lzp
`timescale 1ns/1ns
module led_clk(
input wire sys_clk,
input wire sys_rst_n,//_n表示低电平
input wire key_in,
output reg led_out //用always赋值,所以要用reg
);
//异步复位,使用异步复位更好
//always@(posedge sys_clk or negedge sys_rst_n)
//同步复位
always@(posedge sys_clk)
if(!sys_rst_n) begin
led_out <= 1'b0;
end
else begin
led_out <= key_in;
end
endmodule
tb代码:
//2023/4/9 lzp
`timescale 1ns/1ns
module led_clk_tb();
reg sys_clk;
reg sys_rst_n;
reg key_in;
wire led_out;
initial begin
sys_clk = 1'b1;
sys_rst_n <= 1'b0;
key_in <= 1'b0;
#20
sys_rst_n <= 1'b1;
#210
sys_rst_n <= 1'b0;
#40
sys_rst_n <= 1'b1;
end
always#10 sys_clk = ~sys_clk;
always#20 key_in <= {$random} % 2;
initial begin
$timeformat(19,0,"ns",6);
$monitor("@time %t:key_in=%b led_out=%b", $time, key_in, led_out);
end
led_clk led_clk_tb(
sys_clk,
sys_rst_n,
key_in,
led_out
);
endmodule