LED灯的通过电流一般在3~20mA;
always块里面顺序执行,always块之间是并行执行;
实例化的输出端口必须是wire型
initial语句只执行一次
#20表示延时20单位时间
always@(*)表示对所有输入变量都敏感
if判断,0,z,x为假
casez,casex
有限状态机(fsm)设计:1.状态空间定义;2.状态跳转;3.下个状态判断;4.各个状态下的动作。
流水灯的v文件代码如下:
module flow_led(
input sys_clk50,
input rst_n,
output reg [3:0] led
);
reg [23:0] cnt;
always @ (posedge sys_clk50 or negedge rst_n)
begin
if(!rst_n)
cnt<=1'b0;
else
if(cnt<24'd10)
cnt<=cnt+1'b1;
else
cnt<=24'd0;
end
always @ (posedge sys_clk50 or negedge rst_n)
begin
if(!rst_n)
led<=4'b0001;
else
if(cnt==24'd10)
led<={led[2:0],led[3]};
else
led<=led;
end
endmodule
激励文件如下:
`timescale 1 ns/ 1 ns
module flow_led_vlg_tst();
// constants
// general purpose registers
reg eachvec;
// test vector input registers
reg rst_n;
reg sys_clk50;
// wires
wire [3:0] led;
// assign statements (if any)
flow_led i1 (
// port map - connection between master ports and signals/registers
.led(led),
.rst_n(rst_n),
.sys_clk50(sys_clk50)
);
initial
begin
// code that executes only once
// insert code here --> begin
sys_clk50=1'b0;
rst_n=1'b0;
#100 rst_n=1'b1;
#1000 $stop;
// --> end
$display("Running testbench");
end
always #10 sys_clk50=~sys_clk50;
endmodule
1.打开Modelsim,新建工程
2.添加v文件和vt文件
complie一下。
simulate→start simulate→work下找到激励文件
记得取消优化。然后就可以等着仿真了