计数器有3个信号

时间:2017-03-08 08:33:25

标签: verilog fpga

我想在时钟逻辑中创建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
  

做了什么:

     
      
  • 在模拟器中测试是正常的。
  •   
  • 下载到设备无法正常工作...
  •   

接下来我该怎么办?谢谢....

1 个答案:

答案 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

这将停止振荡,证明您的信号计数正在运行。

回应此测试的结果,我们将从那里开始。