【发布时间】: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 <= enable[3];这样的赋值都应该在程序块内。无需调用模块实例(最后是convert)。实例在每个时间步自动执行。 -
我确实有像'En3
-
提供所有模块/函数定义,解决起来很简单
标签: output verilog assign digital digital-logic