Verilog的流水线设计问题

时间:2013-11-26 08:51:23

标签: verilog

我刚刚开始学习Verilog因为我买了一台FPGA。由于我还没有我的FPGA,我从一个有点大的项目开始,只是为了看看我得到了什么。我可能已经咬了不止这个,但我正在尝试制作一个简单的流水线CORDIC模块。我在模拟中遇到的问题是,值将从测试平台的输入传播到uut,被测单元,一个cordic旋转器的实例,这些信号传播到管道的第一个阶段,xpipe[0],{{ 1}},ypipe[0],然后是zpipe[0]实例,但此cordic_stage实例的输出似乎没有更改cordic_stage中的任何值,{{1 }}或xpipe[1]个寄存器,它们保留在ypipe[1]。现在我确定我的模块有一百万个错误,但我想自己弄清楚它们。我想知道的是为什么这些值不会从zpipe[1]进入管道数组中的下一个元素,以及我如何解决它。以下是我的代码:

zzzz

1 个答案:

答案 0 :(得分:1)

您正在从模块的输出线直接驱动寄存器xpipe,我原以为这会是语法错误,因为寄存器类型只应该在程序块中驱动。

您可以尝试将xyzpipe类型从reg更改为wire,因为线类型应该由模块输出驱动。

OP的附录: cordic_rotator中的代码已更改为线类型,这解决了问题。

wire [VALUE_WIDTH-1:0] xpipe [ANGLE_WIDTH:0];
wire [VALUE_WIDTH-1:0] ypipe [ANGLE_WIDTH:0];
wire [ANGLE_WIDTH-2:0] zpipe [ANGLE_WIDTH:0];
assign xpipe[0] = angle[ANGLE_WIDTH-1] ? -xin : xin;
assign ypipe[0] = angle[ANGLE_WIDTH-1] ? -yin : yin;
assign zpipe[0] = angle[ANGLE_WIDTH-2:0];