Verilog错误:输出或输入端口“Q”必须连接到结构网表达式

时间:2014-07-21 02:03:14

标签: verilog

我每次尝试编译时都会遇到错误,我不确定原因。有人可以帮忙吗?我是verilog的新手。

module D_FF(Clk, D, Reset_n, Q);

    input D, Clk, Reset_n;
    output Q;
    reg Q;

    lab4_GDL f1(.Clk(~Clk), .D(D), .Q(Qm));

    lab4_GDL f2(.Clk(Clk), .D(Qm), .Q(Q));

    always @(posedge Clk, negedge Reset_n)
    begin
        if (Reset_n == 0)
            Q <= 0;
        else
            Q <= D;

    end
endmodule

编辑:这就是问题要求我们做的事情:

在本部分中,您将在AlteraDE2板上实现存储器/寄存器电路。该电路具有以下规格:

  1. DE2板上的开关SW15-0的当前值应始终以十六进制显示在四个七段显示器HEX3-0上。这部分电路将是组合逻辑。

  2. 使用KEY0作为低电平有效的异步复位,KEY1作为时钟输入,您应该能够将值存储在SW15-0的16位寄存器中。寄存器应该是一个16位的正边沿触发寄存器,它使用Altera FPGA中的嵌入式D触发器。 您可以实例化D触发器或为您的寄存器编写行为Verilog模型。该寄存器的内容应始终显示在四个七段显示器HEX7-4上。

  3. 编写提供必要功能的Verilog文件。使用KEY0作为低电平有效的异步复位,并使用KEY1作为时钟输入。您应该可以重复使用上一个实验中的hex-to-7段显示模块。按下复位时,HEX7-4将显示所有零。

    这也是它所指的最后一个实验室:

    module updown (SW, KEY, LEDR, LEDG, GPIO_0, HEX0, HEX1, HEX2, HEX3, HEX4, HEX5, HEX6, HEX7);
    parameter n=32;     // number of bits in updown counter
    input [0:0] SW;     // Updown switch 1=up, 0=down
    input [0:0] KEY;    // KEY[1] = Clock, KEY[0] = Reset_n
    input [0:0] GPIO_0; 
    output [0:6] HEX0, HEX1, HEX2, HEX3, HEX4, HEX5, HEX6, HEX7;
    output [n-1:0] LEDR;    // Display binary count (active high) on Red LEDs
    output [1:0] LEDG;  // Display Clock on LEDG[1], Reset_n on LEDG[0]
    wire Clock, Reset_n, Updown;
    reg [n-1:0] Count;
    
    assign Clock = GPIO_0[0];
    assign Reset_n = KEY[0];
    assign Updown = SW[0];
    assign LEDR = Count;
    assign LEDG[1:0] = {Clock, Reset_n};
    
    always @(posedge Clk, negedge Reset_n) //clock = Clk
        if (Reset_n == 0)       // active-low asynchronous reset
            Q <= 0;
        else        
            Q <= D; 
    

    我的lab4_GDL如下:

    // A gated RS latch
    module lab4_GDL(Clk, D, Q);
        input Clk, D;
        output Q;
    
        wire R_g, S_g, Qa, Qb /* synthesis keep */;
        assign R = ~D;
        assign R_g = ~(R & Clk);
        assign S_g = ~(D & Clk);
        assign Qb = ~(R_g & Qa);
        assign Qa = ~(S_g & Qb);
    
        assign Q = Qa;
    
    endmodule 
    

2 个答案:

答案 0 :(得分:2)

在没有看到lab4_GDL的代码的情况下,我的猜测是Q模块的lab4_GDL端口是输出端口。您不应将输出连接到上层模块中的reg

答案 1 :(得分:0)

例如,

lab4_GDL输出端口Q必须连接到wire,但决不能连接到reg类型。

此后,如果要将其输出值存储在某个寄存器中,则必须在时钟控制{{}内从连接的regQ归因于目的地wire 1}}块。