码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-07-31 13:38:49      阅读:328      评论:0      收藏:0      [点我收藏+]

标签:tput   而不是   注意   产生   程序   实现   ril   assign   变量   

 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 /*always@(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

标签:tput   而不是   注意   产生   程序   实现   ril   assign   变量   

原文地址:https://www.cnblogs.com/shaonianpi/p/9394980.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!