我在下面有一个小的verilog项目实现了LSFR。目前,代码无法在Xilinx ISE 14.6中正确编译。它出错了:
错误:HDLC编译器:108 - “top.v”70行部分选择标量线阵'q'是非法的 错误:HDLC编译器:107 - “top.v”第70行非阻塞分配的非法右侧 错误:HDLC编译器:108 - “top.v”行74部分选择标量线阵'q'是非法的 错误:HDLC编译器:107 - “top.v”第74行非阻塞分配的非法右侧
在我的代码中指出了这一点:
always @ (display) begin
if(display == 1'b0) begin
LSB <= q[3:0];
switch <= LSB;
end
else begin
MSB <= q[7:4];
switch <= MSB;
end
end
我在Xilinx用户指南中查找了错误,它说要解决问题,给出的值大于2,但它已经是8,所以不确定是什么问题。
如果有帮助的话,这是我的整个顶级模块:
`timescale 1ns / 1ps
module top (c, start, clk_in, display, segments);
input [7:0] c;
input start, clk_in;
output [3:0] display;
output [6:0] segments;
reg [6:0] segments;
reg [3:0] display;
reg [3:0] LSB;
reg [3:0] MSB;
wire q[7:0];
wire q_[7:0];
wire clk, dff0_w, dff1_w, dff2_w, dff3_w, dff4_w, dff5_w, dff6_w;
reg [3:0] switch;
initial begin
display <= 4'b0111;
end
clock_divider #(15) divider(.cin(clk_in), .cout(clk));
//switch changes back and forth between the MSB and LSB of the 8 bit number when muxing
decoder bits(clk, switch, segments);
//D adders
dff dff0(.D(dff0_w),.Q(q[0]),.clk(clk),.start(start));
dff dff1(q[0],q[1],clk,start);
dff dff2(q[1],q[2],clk,start);
dff dff3(q[2],q[3],clk,start);
dff dff4(q[3],q[4],clk,start);
dff dff5(q[4],q[5],clk,start);
dff dff6(q[5],q[6],clk,start);
dff dff7(q[6],q[7],clk,start);
//xor gates
xor (dff6_w, q[7], q_[6]);
xor (dff5_w, dff6_w, q_[5]);
xor (dff4_w, dff5_w, q_[4]);
xor (dff3_w, dff4_w, q_[3]);
xor (dff2_w, dff3_w, q_[2]);
xor (dff1_w, dff2_w, q_[1]);
xor (dff0_w, dff1_w, q_[0]);
//buffer the C values
assign q_[0] = c[0] ? 1'b0 : q[0];
assign q_[1] = c[1] ? 1'b0 : q[1];
assign q_[2] = c[2] ? 1'b0 : q[2];
assign q_[3] = c[3] ? 1'b0 : q[3];
assign q_[4] = c[4] ? 1'b0 : q[4];
assign q_[5] = c[5] ? 1'b0 : q[5];
assign q_[6] = c[6] ? 1'b0 : q[6];
assign q_[7] = 1 ? 1'b0 : q[7]; //Cn is always 1
//mux the display
always @ (posedge clk) begin
if(display == 4'b0111)
display <= 4'b1011;
else
display <= 4'b0111;
end
//display the appropriate value when the anode is asserted
always @ (display) begin
if(display == 1'b0) begin
LSB <= q[3:0];
switch <= LSB;
end
else begin
MSB <= q[7:4];
switch <= MSB;
end
end
endmodule
答案 0 :(得分:2)
尝试更改:
wire q[7:0];
wire q_[7:0];
为:
wire [7:0] q;
wire [7:0] q_;
这清除了我的编译错误。