微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > 微电子学习交流 > 困惑!verilog怎么实现动态修改模块参数

困惑!verilog怎么实现动态修改模块参数

时间:12-12 整理:3721RD 点击:
应用场景:上位机发送修改参数命令,下位机接收到命令之后,修改相应模块的参数。以下是代码片段,跪求路过大神指点迷津:
reg [7:0] n;
always@(posedge clk or rst)
begin
if(!rst)
n<=8'd0;
else if(rx_data==8'h05)
n<=8'd2;
end
generate
case(n)
8'd2:  A_module #(10,2)  U1(m,n)
default:A_module  #(3,1) U1(m,n)
endcase
endgenerate
代码编译的时候总提示错误:n不是常数!
那要怎么才能实现动态修改参数呢?

楼主忘说了,帮助楼主解决问题的大神,楼主给Ta充话费以示景仰……

verilog不精通的表现。。。。AMOD如果是简单的,做成function或许有机会。

谢谢大神,A_module很复杂,包括了很多模块,占用LEs大约3000左右。

应该不能通过上位机动态的更新电路。
把最大需要数量实现在那,根据实际需求使用。

多谢指点迷津!结果有点令人沮丧,如果参数可以变为reg之类的变量或许还有可能,估计没戏了,哎……

对于电路来说,你的基本思路是不对的。电路一旦生成是不能根据输入信号而自动变大变小的。
你应该按照最大的情况实例化一个电路,然后根据输入信号去选择这个电路的输出有效宽度。

我设计的这个电路实现的功能的一个处理单元A_module占用了3000多个逻辑单元,上位机修改的参数范围有64种情况,如果每一种都例化一个处理单元的话,需要
3000*64个LEs,FGPA吃不消的……

A_module #(10,2)  U1(m,n)
你想想吧,是不是可以改成
A_module U_all(m,n,x,y); 这种形式
动态实例化是不行的,你要按照硬件的思维来想

嗯,现在也只能往这这方面想了。多谢!

这是没办法的,电路就是电路,是固定的。不可能跟软件一样。其实你可以实例化一个单元,然后把输入信号一段一段输入进去做。然后把输出一段一段再拼出来。

不是这个意思。是要你按照需求最多的情况设计电路,这样需求少的时候也可以用这个电路的一部分完成你想要的功能。
当然这个办法不一定适用于你的情况。
  

把你所有想要的模块,都例化出来,用tranif门根据条件切换不同模块,这是下下策

或者都例化了,弄个可配置的mux选

动态可重配试试

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top