我想在时钟逻辑中创建3个信号。
8s
7s ----- create working signal
6s
5s
4s
3s
2s
1s ----- create timeout signal
0s ----- create finish signal
always @(posedge CLK_1K or posedge signal_count) begin
slot_count = 0;
data_finish = 0;
timeout = 0;
working = 0;
if (signal_count) begin
slot_count <= 1;
counter <= 8;
end else if (counter > 0) begin
counter = counter - 1;
if (counter == 7) begin
working = 1;
end else if (counter == 1) begin
timeout = 1;
end else if(counter == 0) begin
data_finish = 1;
end
end
end
做了什么:
- 在模拟器中测试是正常的。
- 下载到设备无法正常工作...
接下来我该怎么办?谢谢....
答案 0 :(得分:1)
首先是一些编码反馈。不要混合阻止和非阻塞任务。你可以完全做到,但事情可能会让人困惑。在您的情况下,您将counter
指定为非阻止(&lt; =),然后指定为阻止(=)。我猜你可以把所有东西都当作封锁。
我会提前问一个非常简单的问题。时钟名称表示1K,可以是1KHz。你好吗&#34;测量&#34;你的输出知道他们不工作?在1K时,你可能看不到灯光闪烁......假设你有一个O-Scope或LA并证明它不起作用,我将通过我接下来要做的事情。
检查counter
的宽度?至少是4位宽吗?最好是。
检查主板上的以下内容。如果您有o-scope,请检查输入时钟是否正在运行。接下来,检查您的综合PIN分配文件。确保将时钟分配给设备上的右侧引脚。
接下来,signal_count实际上是您的设计重置。您需要确保重置(signal_count)也分配给右侧引脚,并在按下按钮或其他任何内容时实际移动。
然后验证您是否正确编程设备。有done
针吗?一个麻烦的步骤,你有没有别的设计可行吗?如果它在他们的主板而不是你的主板上工作,那就有点说明并指出可疑的硬件,或者可能是缺少跳线或电源。
最后,创建一个新程序。使它变得非常简单,如下所示
将oscope取出并显示工作信号按预期振荡。这不会像写入那样进行模拟,因为working
的初始状态没有被定义,但是在实际电路板上,它应该以半频率振荡。如果确实如此,你知道你有时钟。
always @ (posedge CLK_1K)
begin
working <= ~working;
end
如果它没有振荡,请将程序更改为
assign working = 1'b1
并验证设备加载时信号是否变高。如果它没有问题不是你的来源,而是更糟糕的引脚分配,糟糕的引脚,糟糕的供应等......
然后改为以下
always @ (posedge CLK_1K)
begin
working <= signal_count ? ~working : 1'b0;
end
这将停止振荡,证明您的信号计数正在运行。
回应此测试的结果,我们将从那里开始。