【发布时间】:2019-06-16 03:48:23
【问题描述】:
我正在尝试在 Lattice ICE40 FPGA 上创建 1 Hz 时钟信号。我正在用 Verilog 编写代码并使用 Lattice Radiant 软件。这个 1 Hz 时钟信号将用于创建方波。
但是,我没有得到任何输出,无论是来自时钟信号应该打开的引脚还是来自应该输出方波的引脚。我确定我正在检查正确的引脚。我也确信代码正在下载到板上。我相信 FPGA 出于某种原因实际上并没有创建时钟信号。
这是我的代码:
module square (clk, x, y, z);
// Inputs and Outputs
input clk; // The clock signal
output x, y, z; // The square wave output
// Type Declaration
reg x; // x is a register
// Initialize x
initial
begin
x = 0;
end
// Run each time the clock transitions from low to high
always @(posedge clk)
begin
x = !x; // Flip x
end
// Outputs used to confirm the program is running
assign y = 0; //39A
assign z = 1; //41A
endmodule
这是我的综合约束文件(.ldc):
create_clock -name {clk} -period 1000000000 [get_ports clk]
周期以纳秒为单位定义,因此这是一个 1 Hz 时钟。
谢谢。
【问题讨论】:
-
clk来自哪里?实际上,您的所有square模块(除了静态的y和z分配)都是将x复制为clk,其中clk应该是一个正确的时钟,x是LUT 或寄存器的输出(如果没有完全合成)。定义create_clock约束不会神奇地创建指定频率的时钟。create_clock只是一种通知STA和路由进程时钟特性的方法。您仍然需要在某处实际生成时钟。 -
如果要在 FPGA 上创建时钟,则需要从时钟源中导出。开发板上将有一个振荡器,例如 20MHz。您可以将该 20MHz 划分为您想要的频率,或者使用 PLL 从中创建一个新频率。
-
因为对 cmets 的编辑是有时间限制的:我的错误。
x成为clk频率的一半。其余问题仍然存在,您需要以某种方式制作clk。
标签: verilog fpga clock lattice ice40