2017-03-08 37 views
-2

我想在时钟逻辑中创建3个信号。带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

你能更具体吗?你的代码是在模拟中工作,而不是在设备上工作?还是你收到综合错误? –

回答

1

首先是一些编码反馈。不要混合阻塞和非阻塞任务。你完全可以做到,但事情会变得混乱。在你的情况下,你有counter分配为非阻塞(< =),然后作为阻塞(=)。我猜你可以逃避一切,因为阻止。

我会问最简单的问题。时钟名称表示1K,可能为1KHz。你如何“测量”你的输出以知道他们不工作?在1K时,你可能看不到灯光闪烁......假设你有一个O-Scope或一个LA,并且已经证明它不起作用,我会通过我接下来要做的事情。

检查多宽是counter?它至少有4位宽吗?最好是。

请在您的主板上检查以下内容。如果你有一个范围,检查你的输入时钟是否真的在运行。接下来,检查您的综合PIN分配文件。确保您将时钟分配给设备上的右侧引脚。

接下来,signal_count实际上是您的设计重置。您需要确保重置(signal_count)也被分配到右侧引脚,并且当您按下按钮或其他设备时实际移动。

然后验证您确实正确编程了设备。有没有done引脚?一个麻烦的步骤,你有没有人可以运作的设计?如果它在他们的电路板上工作,而不是在你的电路板上工作,这有点说明问题并指向可疑硬件,或者可能缺少跳线或电源。

最后,创建一个新程序。使其非常简单,如下所示。
取出该oscope并显示工作信号如期振荡。由于working的初始状态未定义,因此不会像写入那样进行模拟,但在实际电路板上,它应该以半频振荡。如果是这样,你知道你有时钟。

always @ (posedge CLK_1K) 
begin 
    working <= ~working; 
end 

如果不振荡,该程序更改为

assign working = 1'b1 

和验证信号为高电平时,该设备的负荷。如果没有这个问题是不是与你的来源,但更多的东西像一个坏的引脚分配,不好销,供不好,等等

然后改变以下

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

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