【问题标题】:Verilog questionsVerilog 问题
【发布时间】:2016-03-29 00:41:41
【问题描述】:

我不知道我的代码有什么问题,可能有很多问题。现在,我无法弄清楚如何将寄存器值分配给我的 En 输出。我现在需要在数字电路课程中使用 Verilog 代码。我有点受够了。

`timescale 1ns / 1ps
/////////////////////////////////////////////////////////////////////////////////    /
// Company: 
// Engineer: 
// 
// Create Date:    13:57:18 03/15/2016 
// Design Name: 
// Module Name:    Moving7Seg 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//////////////////////////////////////////////////////////////////////////////////
module Moving7Seg( B, C, Rst, ClkIn, D6, D5, D4, D3, D2, D1, D0, En3, En2, En1, En0 );

input B, C, Rst, ClkIn;
output D6, D5, D4, D3, D2, D1, D0, En3, En2, En1, En0;

//wire D6, D5, D4, D3, D2, D1, D0, En3, En2, En1, En0;

reg ClkOut = 0;
reg bLast = 0;
reg cLast = 0;
//reg rstLast = 0;

reg [3:0]count = 0;
reg [3:0]enable = 4'b0001;


clockdivider getClk(ClkIn, ClkOut);
seg7 convert(count[3], count[2], count[1], count[0], D6, D5, D4, D3, D2, D1, D0);



always @(posedge ClkOut) begin
    if(Rst == 1) begin
        count = 0;
        enable = 4'b0001;
    end

    if(B != bLast && B == 0) begin
        case(enable)
        4'b0001: enable = 4'b0010;
        4'b0010: enable = 4'b0100;
        4'b0100: enable = 4'b1000;
        default: enable = 4'b0001;
        endcase
    end

    if(C != cLast && C == 0) begin
        count = count + 1;
    end

bLast = B;
cLast = C;
//rstLast = Rst;


end

En3 <= enable[3];
En2 <= enable[2];
En1 <= enable[1];
En0 <= enable[0];
convert;

endmodule

【问题讨论】:

  • output D6, D5, D4, D3, D2, D1, D0, En3, En2, En1, En0; 更改为output D6, D5, D4, D3, D2, D1, D0; 和另一行output reg En3, En2, En1, En0;
  • 所有像En3 &lt;= enable[3];这样的赋值都应该在程序块内。无需调用模块实例(最后是convert)。实例在每个时间步自动执行。
  • 我确实有像'En3
  • 提供所有模块/函数定义,解决起来很简单

标签: output verilog assign digital digital-logic


【解决方案1】:

1) 如果那些“En”输出应该反映enable 信号的当前状态,那么您可能需要像这样“分配”这些值(并将它们保留在always 块之外):

    assign En3 = enable[3];
    assign En2 = enable[2];
    assign En1 = enable[1];
    assign En0 = enable[0];

2) 如评论中所述,删除多余的“转换”行。

3) always 块内的所有赋值都应该是非阻塞的。也就是说,使用&lt;= 赋值运算符,而不是= 运算符。

4) 您可能需要一个else 案例来检查Rst。也就是说,所有启用、计数等的更新都应该只在Rst != 0 时发生。

5) 您可能还想重置 bLastcLast

【讨论】:

    猜你喜欢
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多