第一个程序,计数器
counter.v
module couter(clk,rst,counter_out);
input clk;
input rst;
output [3:0] counter_out;
reg [3:0] counter_out;
always @(posedge clk or negedge rst)
if(!rst)
counter_out <= 0;
else
counter_out <= counter_out + 1'b1;
endmodule
程序实现对输入时钟计数的功能。
module是Verilog的基本单元,每个module由两部分组成:端口声明和功能描述。
验证代码的正确与否需要进行仿真,需要testbench。
test_counter.v
`timescale 1ns/1ns
module test_counter();
parameter CLK_CYCLE = 20;
parameter CLK_HCYCLE = 10;
reg rst;
reg clk;
wire [3:0] counter_out;
counter dut(clk,rst,counter_out);
initial
begin
clk = 1'b1;
rst = 1'b0;
#10 rst = 1;
end
always
#CLK_HCYCLE clk =~clk;
initial
$monitor("rst=%b,clk=%b,counter_out=%b",rst,clk,counter_out);
endmodule
测试平台不需要声明输入输出端口,而且基本上输入都是寄存器类型的,输出都是网线类型的,因为testbench的功能就是驱动输入,监控输出。
文章评论(0条评论)
登录后参与讨论