找回密码
 注册
关于网站域名变更的通知
查看: 339|回复: 1
打印 上一主题 下一主题

多路器的验证

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-10-12 10:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
多路器的验证

6 M$ c7 j" Q9 D+ j
3 E7 P% W+ F+ y, E4 m) E1 d
- G# A. `# R5 X+ R) X! \9 M5 l
FPGA少不了语言的使用,因为Verilog语言类似C语言,本人有一定C语言基础,所以从Verilog开始相对简单.FPGA学习开始:
    1:Verilog语言的学习,熟悉Verilog语言的各种语法,少不了夏宇闻教授的《verilog 数字系统设计教程》。个人感觉<<设计与验证>>也很好
     2:熟悉QuartusII软件的各种功能,各种逻辑算法设计,接口模块(RS232,LCD,VGA,SPI,I2c)的设计,时序分析,硬件优化等,自己开始设计简单的FPGA板子。
------------------------------------------------------------------
   关于多路数据选择器,大致就是指经过选择,把多个通道的数据传送到唯一的公共数据通道上去,实现数据选择功能的逻辑电路称为数据选择器。它的作用相当于多个输入的单刀多掷开关,这样应该更容易懂点.
   下图所示为二选一数据选择器原理图,a,b为输入端,sel为控制端,out为输出端
           
下面通过按键控制LED对二选一选择器的验证
设计定义:
二选一多路器
两个输入IOab。可以是高电平,也可是低电平
输入按键按下时,
LED灯与a端口状态保持一致。
输入按键释放时,
LED灯与b端口状态保持一致
参考代码:
module led_test(a,b,key_in,led_out);  //module xxx();
        input a;//输入端口A
        input b;//输入端口B
        input key_in;        //按键输入,控制多路数据输出的选择
       
        output led_out;        //led 控制端口
       
        assign led_out = (key_in == 0)? a : b;//key_in == 0 led_out = a
       
endmodule
仿真代码:
`timescale 1ns/1ps    //时间精度设置
module led_test_tb;
       //激励信号定义,对应连接到待测试模块的输入端口
        reg signal_a;
        reg signal_b;
        reg signal_c;
       //待检测信号定义,对应连接到待测试模块的输出端口       
        wire led;
      //例化待测试模块,注意:"led_test"必须和文件名必须和顶层名称一致 "led_test_tb"可以个人定义
        led_test led_test_tb(
                .a(signal_a),
                .b(signal_b),
                .key_in(signal_c),
                .led_out(led)
        );
       
      //产生激励测试       
        initial begin
                signal_a = 0;signal_b = 0;signal_c = 0;
                #100;//延时100ns
                signal_a = 0;signal_b = 0;signal_c = 1;
                #100;
                signal_a = 0;signal_b = 1;signal_c = 0;
                #100;
                signal_a = 0;signal_b = 1;signal_c = 1;
                #100;
                signal_a = 1;signal_b = 0;signal_c = 0;
                #100;
                signal_a = 1;signal_b = 0;signal_c = 1;
                #100;
                signal_a = 1;signal_b = 1;signal_c = 0;
                #100;
                signal_a = 1;signal_b = 1;signal_c = 1;
                #200;
                $stop;        //$stop的使用结束仿真
        end
endmodule
对程序完成编译,观察一下RTL viewer
可以看到,RTL与我们需要的设计结果一样
然后我们就可以直接调用 modelsim 进行仿真查看前仿真波形,再次观察结果是否符合设计
通过观察仿真波形没有问题,说明代码逻辑可能正确(当然进一步确认需要后仿真和板级验证),最后当程序能够在板上正确运行才算成功.
   
   由于本人能力有限,出错之处的请各位给予帮助.谢谢
PS:在这里Augus要说声抱歉,自从第一章上传后,需要审核的原因,Augus自觉文笔不好审核不上,就没管理了...请见谅!后续Augus会及时更新做过的例程笔记
2 b5 p0 G: I% R5 w/ p2 K3 L
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-23 12:10 , Processed in 0.125000 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表