多路选择器实现总线结构——Verilog

Posted shaonianpi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多路选择器实现总线结构——Verilog相关的知识,希望对你有一定的参考价值。

 1 //////////////////////////////////////////////////////////////////////////////////
 2 //该程序完成通过多路选择器MUX完成总线读写的功能。
 3 module MuxBus(input request1,input request2,input request3,input request4,input[7:0] unit0_out,input[7:0] unit1_out,
 4               input[7:0] unit2_out,input[7:0] unit3_out,
 5               output[7:0] unit0_in, output[7:0] unit1_in, output[7:0] unit2_in, output[7:0] unit3_in);
 6  reg[1:0] sel;
 7  reg[7:0] bus;
 8  always@(request1,request2,request3,request4)
 9      begin 
10         casex({request1,request2,request3,request4})//注意这里要想使用这种优先级编码译码器,用的是casex,而不是case
11         4b0001:sel=2b00;                          //casex表示不关心x,z,?这三种符号
12         4b001x:sel=2b01;
13         4b01xx:sel=2b10;
14         default:sel=2b11;
15         
16         endcase
17      end
18 always@(sel,unit0_out,unit1_out,unit2_out,unit3_out)
19     begin 
20         case(sel)
21         2b00:bus=unit0_out;
22         2b01:bus=unit1_out;
23         2b10:bus=unit2_out;
24         2b11:bus=unit3_out;
25     endcase
26     end 
27 //仔细分析就知道下述代码从逻辑上和上述代码有冲突,sel作为选择信号,不可能选择了某个器件后,同时对总线进行读和写的操作,
28 //总线某一时刻只能处于读状态或者写状态。如果对总线进行读或者写,需要读写控制信号
29 /*[email protected](sel,bus)
30     begin 
31      case(sel)
32        2‘b00:unit0_in=bus;  //同时,这样的代码书写产生了锁存器单元,比如sel=2‘b01时,unit0,2,3_in这三个器件只能保持它原来的值。
33        2‘b01:unit1_in=bus;
34        2‘b10:unit2_in=bus;
35        2‘b11:unit3_in=bus;
36      endcase
37     end
38 */   //不产生锁存的条件在于对同一个变量满足所有的情况,并不单单是case后面的变量,写出了所有情况即可,要注意不同变量存在时导致的锁存
39 assign unit0_in=bus;
40 assign unit1_in=bus;
41 assign unit2_in=bus;
42 assign unit3_in=bus;
43 endmodule

 

以上是关于多路选择器实现总线结构——Verilog的主要内容,如果未能解决你的问题,请参考以下文章

2选1多路选择器的Verilog hdl

Verilog 二选一多路选择器 Modelsim设计。

Verilog:MUX 的代码

请用结构描述法,将RTL图给出Verilog程序?

总线仲裁器的简单verilog实现

请问用if写出四选一多路选择器的vhdl的设计,怎么写?