公司网站制作哪个公司好,新网站友链,重庆网站建设哪家有,php做网站开源项目时间#xff1a;2024.11.11-11.14
一、学习内容
1.组合逻辑 组合逻辑是VerilgHDL设计中一个重要组成部分。从电路本质上讲#xff0c;组合逻辑电路的特点是输出信号只是当前时刻输入信号的函数#xff0c;与其他时刻的输入状态无关#xff0c;无存储电路#xff0c;也没…时间2024.11.11-11.14
一、学习内容
1.组合逻辑 组合逻辑是VerilgHDL设计中一个重要组成部分。从电路本质上讲组合逻辑电路的特点是输出信号只是当前时刻输入信号的函数与其他时刻的输入状态无关无存储电路也没有反馈电路。
2.多路选择器 多路选择器是数据选择器的别称。在多路数据传送过程中能够根据需要将其中任意一路选出来的电路叫做数据选择器也称多路选择器或多路开关。
3. 实验目标 设计并实现 2 选 1 多路选择器主要功能是通过选通控制信号 S 确定选通 A 路或 B 路作为信号输出。当选通控制信号 S 为 1 时信号输出为 A 路信号当选通控制信号 S 为 0时信号输出为 B 路信号。 开发板的按键未按下时为高电平、按下后为低电平LED 灯则为低电平点亮。 二、实验
1.准备工作
新建文件夹存放工程
2.利用visio绘制和波形图 蓝色的线代表有效信号。 3. 代码编写
在rtl文件夹里新建.v文件进行编写代码
3.1编写代码
方法一使用always进行组合逻辑的编写同时使用if-else条件分支语句进行多路选择器的实现
module mux2_1 //模块名称与文件名尽量保持一致
(input wire [0:0] in_1, //输入信号1input wire in_2; //输入信号2input wire sel, //选通信号output reg out //输出信号);
//用always给变量赋值()里面是敏感条件,*表示通配符在此处表示任何一个信号只要有电平变化都要执行这条语句
//此处*相当于sel,in_1,in_2
always(*)if(sel1b1)out in_1;elseout in_2;
endmodule 方法二使用always-case进行代码编写 方法三使用assign中的三目运算符进行编写代码 3.2实验工程的创建
在Quartus里创建工程添加.v文件进行编译编译成功后进行仿真文件的书写
3.3编写仿真文件
在sim文件夹里创建.v文件进行仿真文件的编写
timescale 1ns/1ns
module tb_mux2_1();
//仿真文件就是要对我们被仿真的模块进行一个输入信号的模拟
reg in_1;
reg in_2;
reg sel;
//进行输出信号的命名将输出信号引出便于信号的观察
wire out;
//initial语句上电只执行一次它的结构一般是initial-begin-end
//在仿真文件中begin-end之间的内容都是顺序执行的在没有延时的情况下几乎没有差别看上去像并行执行
//在rtl语句中begin-end相当于括号的作用在同一个always块中如果给多个变量赋值要使用begin-end
initialbeginin_1 1b0;in_2 1b0;sel 1b0;end
//对三个输入信号进行随机数的赋值
//每隔10ns对in_1进行一次赋值赋值的是一个随机的数0/1
always #10 in_1 {$random}%2; //$random随机数的产生系统函数
always #10 in_2 {$random}%2;
always #10 sel {$random}%2;//为了便于观察需要添加一些系统函数
initialbegin$timeformat(-9,0,ns,6); //显示时间格式是ns10的-9次方,0表示小数点后的位数精确度//里写的内容要和-9处写的对应6表示打印的最小数字字符是6个$monitor(time %t:in1%b in2%b sel%b out%b,$time,in_1,in_2,sel,out); //监测的系统函数便于观察end//实例化在仿真文件中调用我们被仿真的文件
mux2_1 mux2_1_inst //模块名 实例化名称(如果实例化了多次可以在实例化名称后面加数字例如mux2_1_inst3)
(
//此处的.代表连接. in_1(in_1), //输入信号1. in_2(in_2), //输入信号2. sel (sel), //选通信号. out (out) //输出信号);endmodule 3.4仿真波形验证
添加文件后在modelsim里面进行仿真波形的验证
3.5上板验证
引脚约束后连接开发板进行上板验证 三、实验结果 波形图 打印结果 四、知识点和小技巧
1.模块名称与文件名尽量保持一致
2.代码编写规范
输入一定是wire类型;
一位宽可以不写也可以写成[0:0];
输出可以是wire或reg类型用always赋值的变量是reg型;
最后一条信号后面不需要加
*表示通配符
每个模块只能有一组module和endmodule,所有的模块要在这两个之间进行编写
3.设置时间格式的系统函数$timeformat
$timeformat(-9,0,ns,6); //显示时间格式是ns10的-9次方,0表示小数点后的位数精确度//里写的内容要和-9处写的对应6表示打印的最小数字字符是6个
4.获取随机数的系统函数$random
//对三个输入信号进行随机数的赋值
//每隔10ns对in_1进行一次赋值赋值的是一个随机的数0/1
always #10 in_1 {$random}%2; //$random随机数的产生系统函数
always #10 in_2 {$random}%2;
always #10 sel {$random}%2;