从零开始学习vivado——day 1 二选一多路器的设计
2023-12-13 11:23:07
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
研一从零开始学习verilog!!!此时不学何时学!
第一次写博客,以此激励自己努力学习!
我跟的视频教程是b站的一个up主,小梅哥爱漂流。
一、vivado是什么?
vivado是一个编译平台,可运行verilog代码,并且进行模拟仿真。
二、二选一多路器的设计
1.创建一个新的设计文件
随便取个名字,默认verilog语言,点击即可。
默认即可,后面可以纯手打设置端口
之后双击打开你创建好的文件,即可进入编译
文件里面默认的代码直接全部删除,自己手打一遍
2.模块代码编译
(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
若有弹窗,则先选择查看报告
3.创建激励文件
一路默认即可,最后双击创建的激励文件进行编译
4.激励文件代码编译
(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,所以我们需要继续运行
完美!
可在右上角设置那里把第一个选项点掉,方便观看
4.布局布线
上图两个地方都打钩之后,没有红色报错,代表布局布线完成,可查看报告。
5.时序仿真
进行时序仿真时会发现,输出会有延迟以及毛刺的现象发生。
总结
本文简单描述了如何创建工程文件,并设计和仿真了一个简单的二选一多路器。因为没钱买板子,所以后续的连接板子教程我就没看了。
希望能够养成写博客的习惯,努力三年,争取毕业后找到一份称心的工作!!!
文章来源:https://blog.csdn.net/weixin_46087443/article/details/132735570
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!