赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
研一从零开始学习verilog!!!此时不学何时学!
第一次写博客,以此激励自己努力学习!
我跟的视频教程是b站的一个up主,小梅哥爱漂流。
vivado是一个编译平台,可运行verilog代码,并且进行模拟仿真。
随便取个名字,默认verilog语言,点击即可。
默认即可,后面可以纯手打设置端口
之后双击打开你创建好的文件,即可进入编译
文件里面默认的代码直接全部删除,自己手打一遍
(1)定义端口
module hello_world(
a,b,int,out
);
input a;
input b;
input int;
output out;
endmodule
(2)连续赋值语句
assign out =(int==1)? a:b ; //如果int等于1,则out输出为a,否则输出为b
该行代码就是二选一多路器的核心代码
(3)整合代码,然后进行分析综合
module hello_world(
a,b,int,out
);
input a;
input b;
input int;
output out;
//二选一多路器
assign out =(int==1)? a:b ; //如果int等于1,则out输出为a,否则输出为b
endmodule
若有弹窗,则先选择查看报告
一路默认即可,最后双击创建的激励文件进行编译
(1)定义时间尺度
`timescale 1ns/1ns //前面是步进,后面是精度
基本用不到皮秒,一般设计纳秒就OK了,容易出错的是timescale前面的“`”,就是英文键盘上tab键上面的按键
(2)例化
module helloworld_tb();
reg s_a;//激励信号定义为reg型
reg s_b;
reg int;
wire out;//输出信号定义为wire型号
hello_world test_1( //前面名字要和调用模块的名字一样,后面的名字可随意定义
.a(s_a), //变量前面加个点,然后括号内是连接哪个信号线上去
.b(s_b),
.int(int), //例化时,括号里面可以使用原信号,也可以自己定义信号
.out(out)
); //例化过程,将模块调用
(3)变化高低电平
initial begin s_a=0;s_b=0;int=0; #200;//延迟200ns,1s=1000000000ns,九个0 s_a=0;s_b=0;int=1; #200;//延迟200ns,1s=1000000000ns,九个0 s_a=0;s_b=1;int=0; #200;//延迟200ns,1s=1000000000ns,九个0 s_a=0;s_b=1;int=1; #200;//延迟200ns,1s=1000000000ns,九个0 s_a=1;s_b=0;int=0; #200;//延迟200ns,1s=1000000000ns,九个0 s_a=1;s_b=0;int=1; #200;//延迟200ns,1s=1000000000ns,九个0 s_a=1;s_b=1;int=0; #200;//延迟200ns,1s=1000000000ns,九个0 s_a=1;s_b=1;int=1; #200;//延迟200ns,1s=1000000000ns,九个0 $stop;//停止 end
(4)代码整合并仿真
`timescale 1ns/1ns //前面是单位,后面是精度 module helloworld_tb(); reg s_a;//激励信号定义为reg型 reg s_b; reg int; wire out;//输出信号定义为wire型号 hello_world test_1( //前面名字要和调用模块的名字一样,后面的名字可随意定义 .a(s_a), //变量前面加个点,然后括号内是连接哪个信号线上去 .b(s_b), .int(int), //例化时,括号里面可以使用原信号,也可以自己定义信号 .out(out) ); //例化过程,将模块调用 initial begin s_a=0;s_b=0;int=0; #200;//延迟200ns,1s=1000000000ns,九个0 s_a=0;s_b=0;int=1; #200;//延迟200ns,1s=1000000000ns,九个0 s_a=0;s_b=1;int=0; #200;//延迟200ns,1s=1000000000ns,九个0 s_a=0;s_b=1;int=1; #200;//延迟200ns,1s=1000000000ns,九个0 s_a=1;s_b=0;int=0; #200;//延迟200ns,1s=1000000000ns,九个0 s_a=1;s_b=0;int=1; #200;//延迟200ns,1s=1000000000ns,九个0 s_a=1;s_b=1;int=0; #200;//延迟200ns,1s=1000000000ns,九个0 s_a=1;s_b=1;int=1; #200;//延迟200ns,1s=1000000000ns,九个0 $stop;//停止 end endmodule
此时,程序并没有跑完我们所设计的1600ns,只跑了1000ns,所以我们需要继续运行
完美!
可在右上角设置那里把第一个选项点掉,方便观看
上图两个地方都打钩之后,没有红色报错,代表布局布线完成,可查看报告。
进行时序仿真时会发现,输出会有延迟以及毛刺的现象发生。
本文简单描述了如何创建工程文件,并设计和仿真了一个简单的二选一多路器。因为没钱买板子,所以后续的连接板子教程我就没看了。
希望能够养成写博客的习惯,努力三年,争取毕业后找到一份称心的工作!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。