赛灵思
直播中

李艳

7年用户 1466经验值
私信 关注
[问答]

哪里可以找到完全参数化的多路复用器?

早上好。
我正在寻找有关完全参数化多路复用器模块的建议。
我们需要输入通道数,每通道位数等的参数化。
经过一些挖掘后,我看到了一些使用if语句和case语句的部分参数化设计。
我的问题是,如果(地址== x)阻止大量输入,如何进行参数化。
我可以写:
如果地址== 0
out = in [0]
如果地址== 1
out = in [1] ....等
那当然是有效的硬接线,不适合大量的输入。
任何建议都会有用,谢谢。
埃德

回帖(7)

潘晶燕

2019-10-31 08:49:43
为什么?
多路复用器自动推断,并由综合工具优化。
Austin Lesea主要工程师Xilinx San Jose
举报

张娜

2019-10-31 09:02:59
谢谢。
是的,我知道,只是在努力想出一种编码N位M-1多路复用器的好方法,而不必求助于非可伪造的案例陈述等。
例如,4-1 8位MUX不会太难编码,但如果它是16-1 64位MUX则会怎样。
对于应用程序,我们有一组M个并行任务,每个任务将数据传递到一组M(N *深度)数据存储元素中。
当存储元件已满时,我们使用多路复用器在USB端点之间逐个读取它们以在它们之间切换。
谢谢...
举报

杨玲

2019-10-31 09:21:57
如果你在Verilog中写这个,可变字宽度没有问题,但改变了
输入数量会影响模块的端口数量,并且不易处理。
您可以使用所需的最大输入端口数(可变宽度)制作模块
然后将未使用的端口保持打开状态,但这往往会产生大量警告。
Verilog 2001
不允许端口中的数组,因此没有简单的方法来避免端口数量的变化。
如果您想从单个端口获取所有输入,可以将它们连接起来
模块实例化并在结果巨大的向量上进行位选择。
然而那
在实例化代码中开始看起来相当丑陋。
VHDL和System Verilog都有其他方法可以提供帮助。
- Gabor
举报

陈秀珍

2019-10-31 09:33:36
如果SystemVerilog不可用,我会将所有多路复用器输入连接到一个宽矢量输入:
模块多路复用器
#( 
参数 
WIDTH = 8,//最小1 
NUM_INPUTS = 16 //最小2


//输入线[NUM_INPUTS - 1:0] [WIDTH - 1:0] a_i,// SystemVerilog 
输入线[NUM_INPUTS * WIDTH - 1:0] a_i, 
输入线[clogb2(NUM_INPUTS) - 1:0] select_i, 
输出线[WIDTH -1:0] y_o
); 
赋值y _o = a_i >>(select_i * WIDTH);
endmodule
我已经将SystemVerilog样式输入注释掉了。
如果Systemverilog可用,代码将与该声明一样工作。
未经测试,但想法就在那里......
问候,
标记
举报

更多回帖

发帖
×
20
完善资料,
赚取积分