【发布时间】:2016-04-01 10:47:21
【问题描述】:
我为两点 FFT 编写了一个小代码,其中我的输入(64 位复数)采用 IEEE-754 格式(双精度)。这是我的代码的链接(蝴蝶模块、加法器/减法器模块、测试台):
当我尝试模拟测试台时,我遇到了以下错误列表:
P.S : 我是初学者,所以,我的写作风格可能不好。请帮我解决这个问题。
【问题讨论】:
-
pastebin.com/Y55fKX81@toolic
标签: verilog
我为两点 FFT 编写了一个小代码,其中我的输入(64 位复数)采用 IEEE-754 格式(双精度)。这是我的代码的链接(蝴蝶模块、加法器/减法器模块、测试台):
当我尝试模拟测试台时,我遇到了以下错误列表:
P.S : 我是初学者,所以,我的写作风格可能不好。请帮我解决这个问题。
【问题讨论】:
标签: verilog
参考 OP 在评论中提供的this 链接。您的代码适用于所有 SystemVerilog 模拟器。模块的输出必须连接到wire。参考下图:
模块内部的输出端口可以是reg或wire。但是,当该模块实例化时,它必须连接到网络或wire。
参考IEEE 1800-2012,第 23.3.3 节:
每个端口连接应该是源到的连续分配 sink,其中一个连接项应为信号源,另一项应为信号源 应为信号接收器。分配应是连续的 输入或输出端口从源到接收器的分配。
当端口在实例化中连接到任何其他端口时,它是一个常量分配,因此它总是要求目标端口是一张网。
因此,在此代码中,将 wires 连接到输出模块 add_sub 并将线的值分配给 reg outr1,outr2 等。
// Draw wires to be connected as output
wire [63:0] t1,t2,ti1,ti2;
// Drive all regs from values of wires
always @*
begin
outr1 = t1;
outr2 = t2;
outi1 = ti1;
outi2 = ti2;
end
// Change : Wires connection
add_sub adder1(en,clk,inr1[63],inr2[63],inr1[62:52],inr2[62:52],inr1[51:0],inr2[51:0],1'b0,t1[63],t1[62:52],t1[51:0]);
//...
我已经使用EDAPlayground here 的所有模拟器模拟了您的代码,并且运行良好。参考this和this类似问题。
【讨论】:
reg 类型的信号分配给 wire 类型的另一个信号。 (例如,<wire_type_signal> <= <reg_type_signal>)。当我删除该行时,错误消失了。