多路选择器实现总线结构——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         4‘b0001:sel=2‘b00;                          //casex表示不关心x,z,?这三种符号
12         4‘b001x:sel=2‘b01;
13         4‘b01xx:sel=2‘b10;
14         default:sel=2‘b11;
15
16         endcase
17      end
18 always@(sel,unit0_out,unit1_out,unit2_out,unit3_out)
19     begin
20         case(sel)
21         2‘b00:bus=unit0_out;
22         2‘b01:bus=unit1_out;
23         2‘b10:bus=unit2_out;
24         2‘b11: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

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

时间: 2024-10-16 02:15:46

多路选择器实现总线结构——Verilog的相关文章

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

一个简单的二选一多路选择器 逻辑图 Verilog源程序 module Mux_Two ( input a, //Data input b, //Data input sl, //High: b ;Low: a output reg out ); always@(sl or a or b) if(!sl) out=a; else out=b; endmodule Modelsim架构文件 a为输入25MHz方波,b为输入12.5MHz的方波,sl为输入6.25MHz的方波.sl为高电平时,out

两种不同的多路选择器?

综合后遇到两种不同的多路选择器. 第一种,通过sel输入选择输出是A[7:0]还是E[7:0]. 第二种,通过sel输入选择输出是ABCD中的某一个. 值得注意的是当ABCD变成多位的时候,综合后的结果就变成这样了: 看起来MUX只能做一位的选择,不能选择多位向量. 我想知道前两种“多路选择器都是一样的吗?”

多路选择器,加法器原理及verilog实现

1.数据选择器是指经过选择,把多个通道的数据传到唯一的公共数据通道上.实现数据选择功能的逻辑电路称为数据选择器,它的作用相当于多个输入的单刀多掷开关.本例程以四选一数据选择器(电平触发)为例. 四选一数据选择器书堆 4 个数据源进行选择, 使用量为地址 A1A0 产生 4 个地址信号,由 A1A0 等于"00" . "01" . "10" . "11"来选择输出,真值表如下: 对应的verilog代码为 module mux4

多路选择器(multiplexer)简介

简称:多路器 功能:多输入  单输出   组合逻辑电路 verilog代码实现: module Mux_8(addr,in1,in2,in3,in4,in5,in6,in7,in8,Mout,nCS); input[2:0] addr; input[width-1:0] in1,in2,in3,in4,in5,in6,in7,in8; input nCS; output[width-1:0] Mout; reg[width-1:0] Mout; parameter width=8; [email

Verilog case coding style

1.一般情况下,综合器将case语句综合成多路选择器,但也可能综合成优先级译码器. 2.case语句中,如果条件列举不完全,将综合出不必要的锁存器. 综合器指令://synopsys parallel_case & //synopsys full_case 使用//synopsys parallel_case可以引导综合器生成多路选择器. 1 always @(cs_state) 2 begin 3 case(cs_state) // synopsys parallel_case 4 2'b00

FPGA学习笔记(四)——Verilog基本语法

###### [该随笔部分内容转载自小梅哥] ######### 组合逻辑:    多路选择器.加法器.译码器.乘法器 时序逻辑:    计数器.分频器.定时器.移位寄存器 一.Verilog文件的基本结构 1.模块声明     模块名    端口列表 2.端口类型.位宽定义 3.功能描述 //模块描述方式一(先列出端口,再描述端口类型) //此方式虽然行数多,但是方便后面例化端口,推荐使用 module name( , , //最后一个不需要"," ); //端口类型描述 //功能描

verilog学习(7)实战之扫描链

一:可侧性设计简介(DFT) 1:什么是可测性? 相当于debug中给程序段加入断点. 设计工具自动将扫描插入到设计中,在设计通过仿真后,在设计阶段的后期,扫描被插入到设计中.扫描的目的是未来观察一个设计或者是整个芯片的内部变化. 2:JTAG 用一组特别的测试端口来控制扫描操作,这组端口被称为JTAG. 二:简单扫描举例 我们在实战一中加入扫描链 1:在Intro_Top中加入JTAG测试端口,加入5个1比特端口,先不连接它们,这5个端口分别是:ScanMode,ScanIn,ScanOut,

【Verilog】组合逻辑写法

下面是四选一多路选择器.有两类input信号,输入信号 in[3:0] ,选择信号 s[1:0]. s选定后,in更新,out跟着更新,所以in必须写入敏感列表. 原文地址:https://www.cnblogs.com/kevinchase/p/9149072.html

【小梅哥FPGA进阶教程】第九章 基于串口猎人软件的串口示波器

九.基于串口猎人软件的串口示波器 1.实验介绍 本实验,为芯航线开发板的综合实验,该实验利用芯航线开发板上的ADC.独立按键.UART等外设,搭建了一个具备丰富功能的数据采集卡,芯航线开发板负责进行数据的采集并将数据通过串口发送到PC机上,PC端,利用强大的串口调试工具--串口猎人,来实现数据的接收分析,并将数据分别以波形.码表.柱状图的形式动态显示出来,以让使用者能够直观的看到ADC采集到的信号细节.同时,用户也可以使用串口猎人通过串口给下位机(FPGA)发送指令,下位机将对接收到的指令进行解