tag 标签: 多路选择器

相关博文
  • 热度 21
    2016-4-10 13:55
    986 次阅读|
    0 个评论
    学FPGA少不了语言的使用,因为Verilog语言类似C语言,本人有一定C语言基础,所以从Verilog开始相对简单.FPGA学习开始:     1: Verilog 语言的 学习 ,熟悉Verilog语言的各种语法,少不了夏宇闻教授的 《verilog  数字 系统 设计 教程 》 。个人感觉设计与验证也很好      2:熟悉QuartusII软件的各种功能,各种 逻辑 算法设计, 接口 模块(RS232,LCD,VGA,SPI,I2c等)的设计,时序分析,硬件优化等,自己开始设计简单的FPGA板子。 ------------------------------------------------------------------     关于多路数据选择器,大致就是指经过选择,把多个通道的数据传送到唯一的公共数据通道上去,实现数据选择功能的逻辑电路称为数据选择器。它的作用相当于多个输入的单刀多掷开关,这样应该更容易懂点.    下图所示为二选一数据选择器原理图,a,b为输入端,sel为控制端,out为输出端              下面通过按键控制LED对二选一选择器的验证   设计定义: 二选一多路器 两个输入IO,a、b。可以是高电平,也可是低电平 输入按键按下时, 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会及时更新做过的例程笔记 更多资料参考                 发烧友小梅哥专版 http://bbs.elecfans.com/zhuti_fpga_1.html                     梦翼师兄的炼狱传奇  
  • 热度 13
    2012-5-8 10:15
    1253 次阅读|
    4 个评论
    多路选择器的不同语句的实现 module mux1(             input a,             input b,             input sel,             output out             ); assign out=sel?a:b; endmodule   module mux2(             input a,             input b,             input sel,             output reg  out             );   always@(a or b or sel ) begin case(sel)  1'b1:  out=a;  1'b0:  out=b; default:  out='bx; endcase end endmodule   module mux3(             input a,             input b,             input sel,             output reg  out             );   always@(a or b or sel ) begin if(sel)    out=a; else    out=b; end   endmodule    图1-1 assign语句的RTL 图1-2 assign语句的Technology Map Viewer              图2-1 CASE语句的RTL       图2-2CASE语句的Technology Map Viewer         图3-1 if-else语句的RTL      图3-2 if-else语句的Technology Map Viewer   从各自实现情况看,它们所占有的资源基本是一样的。但从RTL中CASE语句还是与 if-else语句有所区别。CASE语句倾向于并行结构,后者倾向于优先级   不管采用何种方式进行设计,最近的优化和布局布线其实是交给了开发工具去干,所以我以为在硬件描述语句中,可以用一句话:条条路径通罗马,大路可能宽阔,小路可能便捷,但是最终都是到达同一个目的地。从上面的分析,形式可以不同,其实实现逻辑是相同的,这也能看出了开发工具的强大的地方!  
相关资源