modelsim altera_FPGA学习altera系列: 第六篇 二选一多路选择器的设计及仿真测试

9413bff1c4c43bf3a810921062849c0b.gif大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。

今天给大侠带来“FPGA学习系列 altera"系列,持续更新。此学习心得是本人之前所写,所用设计软件为Quartus II 13.1,现Quartus II 新版本已更新到19+,以下仅供初学者学习参考。后续会更新其他系列,敬请关注。话不多说,上货。

1375fad1cd35103d03cbcfa67aa3dc43.gif 在数字电路中,二选一多路选择器具备组合逻辑电路的简单性和经典性的特征,我们的第一个设计就从“它”开始。 工程名称为“mux2_1”,架构图如下:

a0a68a5915b49701f9f3c828af2d4ed7.png


端口描述: 输入: a、b、s。 输出: c。
功能描述: 当“s”为高电平时,“c”等于“a”; 当“s”为低电平时,“c”等于“b”; 1375fad1cd35103d03cbcfa67aa3dc43.gif Verilog代码实现:
/*模块名称:mux2_1模块功能:当“s”为高电平时,“c”等于“a”;当“s”为低电平时,“c”等于“b”;作者:郝旭帅邮箱:746833924@qq.com*/module mux2_1 (a, b, s, c);    input a;    input b;    input s;    output reg c;    always @ (*)        begin            if (s)                begin                    c = a;                end            else                begin                    c = b;                end        endendmodule
1375fad1cd35103d03cbcfa67aa3dc43.gif 这段代码很简单,相信小伙伴们自己能理解。 如果有问题的话,可以发邮件到我的邮箱或者在“QQ交流群173560979”里面询问,我会及时回复大家。 写完了“二选一多路选择器”的代码,我们可以去检查一下代码是否有语法错误,点击: ,快捷键是: Ctrl + K。 如果出现语法错误,我们要去修改代码并且再一次检查语法,直到不再有错误。 虽然语法错误没有了,但是逻辑是否正确呢? 这些还是不得而知的。 写上一段激励,通过modelsim来查看我们的波形是否正确。 首先新建一个verilog文件,名称为“mux2_1_tb”(在复杂设计中有很多的设计文件,并且都需要去测试。 笔者建议: 对那个模块测试,激励的名称就叫做“_tb”)。 1375fad1cd35103d03cbcfa67aa3dc43.gif 激励的代码如下:
/*模块名称:mux2_1_tb模块功能:为mux2_1提供输入信号 作者:郝旭帅邮箱:746833924@qq.com*/`timescale 1ns/1psmodule mux2_1_tb;  reg a;  reg b;  reg s;  wire c;  initial begin    a = 1'b0;    b = 1'b1;    s = 1'b0;    # 50    a = 1'b0;    b = 1'b1;    s = 1'b1;    # 50    a = 1'b1;    b = 1'b0;    s = 1'b0;    # 50    a = 1'b1;    b = 1'b0;    s = 1'b1;    # 50    $stop;  end    mux2_1 mux2_1_dut(      .a(a),      .b(b),      .s(s),      .c(c)    );endmodule
上述代码就是mux2_1的测试代码,大家写完之后也要去检测代码是否有语法错误。 下面笔者来一一解释激励中的各个语句都是什么意思: 1. 时标: `timescale 1ns/1ps 1) 前面的”`”是Esc键下面的键(和波浪线为同一键)。 2) “/”前面的1ns 为时间单位。 3) “/”后面的1ps为时间精度。 深入理解时标的意义: 在激励中,有很多的 “# xx“,代表的意思是: 延时xx ns。 那么时间精度是什么呢? 这个我们可以看看自己的存款余额,例如: 100.21元。 单位是: 元,精度是: 0.01元(也可以理解为: 分)。 对比一下,是不是一下子就理解了呢。 但是,要注意,精度不能比单位大。 1375fad1cd35103d03cbcfa67aa3dc43.gif 2. 模块开始和结束
module mux2_1_tb;endmodule
激励是不需要有端口的,所有的信号自己内部产生,然后连接到我们要测试的设计上。 1375fad1cd35103d03cbcfa67aa3dc43.gif 3. 定义的变量
reg a;reg b;reg s;wire c;
将设计的输入定义成reg的类型(在initial模块中赋值必须是reg类型),我们在激励当中对它们赋值,然后传输到设计当中。 将设计的输出定义成wire的类型,连接到设计的输出端口,在modelsim中查看输出波形是否正确。 1375fad1cd35103d03cbcfa67aa3dc43.gif 4.上电过程
initial begin    a = 1'b0;    b = 1'b1;    s = 1'b0;    # 50    a = 1'b0;    b = 1'b1;    s = 1'b1;    # 50    a = 1'b1;    b = 1'b0;    s = 1'b0;    # 50    a = 1'b1;    b = 1'b0;    s = 1'b1;    # 50    $stop;end
initial 模块是顺序执行的。 我们通过延时将输入在不同的时间段赋不同的值。 ”1’b1”: 前面的“1“代表1bit,”‘b“代表用二进制表示(这个” ’“是单引号,一定要和`tiemscale的”`“区分开),后面的”1“代表高电平。 $stop 是仿真的停止命令,具体的意思: 当运行这个地方的时候,仿真自动停止(如果有不明白的小伙伴,可以查看后续章节)。 1375fad1cd35103d03cbcfa67aa3dc43.gif 5. 设计例化并连线
mux2_1 mux2_1_dut(      .a(a),      .b(b),      .s(s),      .c(c)    );
例化方式笔者在《FPGA学习系列 altera 系列 第五篇 verilog基础语法》中有介绍。 上述就是二选一多路选择器激励的分析,如果还是有不明白的小伙伴可以发邮件到我邮箱或者加群询问。 END 制作人:郝旭帅(QQ:746833924)         QQ交流群:173560979(进群备注地区+名字)大侠们,江湖偌大,继续闯荡,愿一切安好,有 缘 再见! 4e1633871fe4780046efa36f64eea607.gif

8d27d0b7a4414fbe92f957350e8eb88d.png

FPGA技术江湖广发江湖帖

无广告纯净模式,给技术交流一片净土,从初学小白到行业精英业界大佬等,从军工领域到民用企业等,从通信、图像处理到人工智能等各个方向应有尽有,QQ微信双选,FPGA技术江湖打造最纯净最专业的技术交流学习平台。

FPGA技术江湖微信交流群

765d9fc19a500762abf0a1167d8b7ab0.png

加群主微信,备注职业+方向+名字进群

FPGA技术江湖QQ交流群

f20acb6d67ee657e747a8f61002e37e8.png

备注地区+职业+方向+名字进群

503daf9fbde464b6fbf1269fd246b911.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值