我有以下用verilog编写的LFSR:
module LFSR #(parameter SIZE=1) /*Define a parameter for size of output*/
(
input clk,
input reset,
output [SIZE-1:0] q
);
/*feedback taps for the LFSR*/
parameter shift1=1,shift2=2,shift3=2;
reg [15:0] shift; /*Shift register*/
wire xor_sum1,xor_sum2; /*feedback signals*/
/*Feedback logic*/
assign xor_sum1=shift[shift1] ^ shift[shift2];
assign xor_sum2=xor_sum1 ^ shift[shift3];
/*Shift the registers*/
always @ (posedge clk,posedge reset)
if(reset)
shift<=16'b1111111111111111;
else
shift<={xor_sum2,shift[15:1]};
/*Set the output*/
assign q=shift[SIZE-1:0];
endmodule
我尝试将其实例化如下:
/*Instantiate LFSR for the Random_X_Vel variable*/
LFSR
#(.SIZE(2),
.shift1(3),
.shift2(9),
.shift3(1))
LFSR_Random_X_Vel
(
.clk(clk),
.reset(reset),
.q(Random_X_Vel)
);
不确定我做错了什么,它无法在ISE14.7和Modelsim 10.2中编译。
导致问题的原因是什么?如何解决?
答案 0 :(得分:1)
定义参数时如下:
parameter shift1=1,shift2=2,shift3=2;
Modelsim允许您使用defparam
关键字修改此值,即:
defparam LFSR_Random_X_Vel.shift1 = 3;
如果您希望能够进行内联重新定义,您应该声明您的参数如下:
module LFSR #(parameter SIZE=1,shift1=1,shift2=2,shift3=2)
(
input clk,
input reset,
output [SIZE-1:0] q
);
它看起来像是Modelsim问题,因为其他一些程序(例如Riviera)在编译代码时没有任何问题。
答案 1 :(得分:1)
LFSR只有1个可配置参数。 module LFSR #(parameter SIZE=1)
。但是你的实例尝试设置4。
LFSR #(
.SIZE(2),
.shift1(3),
.shift2(9),
.shift3(1)
)
移动本地&#39;进入端口列表的参数将允许在实例上设置它们;
module LFSR #(
parameter SIZE=1,
parameter shift1=1,
parameter shift2=2,
parameter shift3=2
)