七、 测验渠道规划
本试验主要对LED的输出和输入与复位的联系进行测验仿真,经过仿真,即可验证规划的正确性和合理性。相关testbench的代码如下:
以下是代码片段:
`timescale 1ns/1ns
module LED_Driver_tb;
reg Rst_n;
reg [3:0] Sig;
wire [3:0] Led;
LED_Driver
#( /*参数例化*/
.Width (4)
)
LED_Driver_inst(/*端口例化*/
.Rst_n(Rst_n),
.Sig(Sig),/*OFF ON ON OFF*/
.Led(Led)
);
initial begin
Rst_n = 0;
Sig = 4’b1010;
#100;
Rst_n = 1;
#40 Sig = 4’b0001;
#40 Sig = 4’b0010;
#40 Sig = 4’b0011;
#40 Sig = 4’b0100;
#40 Sig = 4’b0101;
#40 Sig = 4’b0110;
#40 Sig = 4’b0111;
#40 Sig = 4’b1000;
#40 Sig = 4’b1001;
#40 Sig = 4’b1010;
#40 Sig = 4’b1011;
#40 Sig = 4’b1100;
#40 Sig = 4’b1101;
#40 Sig = 4’b1110;
#40 Sig = 4’b1111;
#40;
$stop;
end
endmodule
由testbench中能够看出,初始值给Sig赋了一个初始值,体系处于复位状况,100ns后,复位进程完毕,体系进入正常作业状况,Sig信号每隔必定时刻改变一次。因而,只需求调查Led信号与Sig信号的联系,即可验证规划的正确与否。
八、 仿真剖析
由上图仿真成果可知,当复位信号为低电平时,Led输出悉数为1,则一切LED平息,当复位信号为高电平时,则Led输出与Sig信号共同,证明规划正确无误。关于顶层模块,仿真没有什么太大的实际意义,因而不做仿真。
九、 下板验证
手头暂无开发板,板级验证略。
十、 总结
或许许多初学FPGA,又看过其它一些材料的同学会对小梅哥的这种安排方法感觉不太习气,以为原本一个代码模块就能搞定的事儿被我硬生生拆成了两个,增加了体系的杂乱性。其实,我这儿主要是强调了一种建模的思维,咱们所做的模块必定要具有灵活性和通用性,当其它规划中需求用到该外设时,只需求关怀其内部端口就行了,在顶层例化时只需求将对应信号接到该端口上就能完成功用了,不必再专门为了特定使用再写一次。现在体系简略,或许我们还看不出这种方法的优势,跟着今后的规划越来越杂乱,我们就能很明显的看到这种规划方法的优势地点了。