【问题标题】:Input Output for 8-bit ALU using FPGA board使用 FPGA 板的 8 位 ALU 的输入输出
【发布时间】:2015-12-07 04:52:30
【问题描述】:

我是 xilinx 的新手,所以请原谅代码中的任何愚蠢之处。

啊,所以我正在尝试设计一个 8 位 ALU,该模块在模拟中运行良好,但我们需要在 FPGA 板上获取输入和显示输出.

从技术上讲,我应该使用 RS-232,但由于我们只有一个 8 位输入和 8 个开关,因此我们正在尝试以这种方式对其进行编码。

但是,代码无法编译并给出错误 "expecting 'endmodule', found 'forever'"

我使用了'forever' 而不是'always',因为始终不允许在其中实例化任何实例。

谁能帮我们找出代码有什么问题?

module main(out,in,switch);
output [7:0] out;
input [7:0] in;
input switch;
reg [7:0] a,b,select;
reg [1:0] count;
wire eq, comp, C8;
initial
begin
count = 2'b00;
select = 8'b0000_0000;
end
MyALU A(eq, comp, C8, out, a, b, 1'b0, select[0], select[1], select[2], select[3]);


forever
begin
if (switch)
    begin
        case (count)
        00: 
             begin
             a  = in;
             count = 2'b01;
             end
        01: 
             begin
             b  = in;
             count = 2'b10;
             end     
        10: 
             begin
             select  = in;
             A(eq, comp, C8, out, a, b, 1'b0, select[0], select[1], select[2], select[3]);
             count = 2'b00;
             end
        default
             a = in;
      endcase        
    end
end 

【问题讨论】:

  • verilog 内的循环必须在某个程序块内。在forever 之前使用initial。或者删除forever 并使用always @(*) 是更好的方法。 endmodule 在这里不见了。
  • 模块实例化只是在任何程序块之外。如果需要多个实例(此处不是这种情况),请使用 generate 块。

标签: verilog fpga xilinx alu


【解决方案1】:

verilog 中的每个模块都必须以endmodule 行结尾。您的代码中缺少这一点。并尝试使用always@(*) 而不是foreverforever 不可综合,仅用于模拟验证。

【讨论】:

    【解决方案2】:
    1. forever 语句替换为always @(*)
    2. 从 case 语句中删除这一行: A(eq, comp, C8, out, a, b, 1'b0, select[0], select[1], select[2], select[3]);
    3. 在末尾添加endmodule

    【讨论】:

      猜你喜欢
      • 2015-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多