赞
踩
always 表示一直重复的活动。触发always语句方式:
always #10 clk <= ~clk;
always @(posedge sys_clk or negedge sys_rst_n) begin
...
end
always @(a or b or c)begin
out = a ? b : c ;
end
always @(*)begin
...
end
1. 描述时序逻辑的always语句,用 非阻塞 赋值 <=,这种电路结构与触发沿有关;
2. 描述组合逻辑的always语句,用 阻塞 赋值 =,这种电路结构只与电平有关;
PS :不允许在多个always语句块中对同一个变量进行赋值
always @(posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n)
led <= 8'b0;
else begin
case (num)
4‘h0 : led <= 8'b1100_0000;
4‘h1 : led <= 8'b1111_1001;
...
default : led <= 8'b1100_0000;
endcase
end
end
相当于一条连线,对wire型变量进行持续赋值,用阻塞赋值 =,描述组合逻辑
不可以放在always中,需要独立于模块写。
module breath_led(
input sys_clk,
input sys_rst_n,
output led
);
reg [15:0] period_cnt;
reg [15:0] duty_cycle;
assign led = (period_cnt >= duty_cycle) ? 1'b1 : 1'b0;
对于每个模块的输入输出,有需要就定义,同一个信号在前后有了变化就定义。
比如,在按键控制led实验中,需要判断消除抖动后的按键信号,那就定义一个抖动消除后的输出信号呗
再比如:呼吸灯实验中,led亮的程度是变化的,所以也定义成一个变量inc_dec_flag,Inc由灭到亮为1,dec由亮到灭为0。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。