为什么我不能在Verilog中将寄存器连接到输出?

时间:2019-02-22 16:11:16

标签: verilog fpga

我正在尝试使用Nexsys 2设计实验室(Spartan 3E 1200 FPGA)和Xilinx 12.4自学FPGA。我已经能够使用大多数基本功能,但似乎无法修改always块中的寄存器,然后为其分配输出。这是我的简化代码,用于LED闪烁。

`timescale 1ns / 1ps
`define MHZ 33000

module VerilogFirst(
    input clk,
    output led5
);
   reg myout = 1'b0;
   reg[0:8] timer = 8'b00000000;
   always @(posedge clk) begin
        if (timer >= `MHZ) begin
            myout <= ~myout;
            timer <= 0;
        end
        else begin          
            myout <= myout;
            timer <= timer + 1;
        end
   end
   assign led5 = myout;
endmodule

还有UCF:

NET "clk"   LOC = "B8";# Bank = 0, Pin name = IP_L13P_0/GCLK8, Type = GCLK, Sch name = GCLK0
NET "led5"  LOC = "P15";# Bank = 1, Pin name = IO, Type = I/O, Sch name = LD4? s3e500 only

一切正常,但是当我尝试生成位流时,出现错误,指出LED未连接任何东西。

ERROR:PhysDesignRules:368 - The signal <led5_OBUF> is incomplete. The signal is not driven by any source pin in the design.   

ERROR:PhysDesignRules:10 - The network <led5_OBUF> is completely unrouted.

ERROR:Bitgen:25 - DRC detected 2 errors and 1 warnings.  Please see the previously displayed individual error or warning messages for more details.

1 个答案:

答案 0 :(得分:3)

33000的常数MHZ不适合9位寄存器timer

因此timer永远不会超过该值,myout永远不会翻转。永远也不会使用计时器值,因为它的值不会影响任何事情,因此编译器将完全优化所有内容。甚至clk信号都将保持闲置状态,您将收到有关此警告。