verilog数码管静态显示计数器

最近刚上手数字电路实验,很多地方都不懂,实验课要求做出数码管静态显示计数器。自己写了一段代码也没报错,但是上basys3板子就行不通。

总体思路如下:

1: 计数模块

module cnt(
input clk1,
output reg[3:0] cnt
    );
    reg [27:0] times;
    initial times = 28'b0;

    always@(posedge clk1)
    begin
    if(times == 5000000)
    begin
    times = 28'b0;
    cnt = cnt + 4'b1;
    end
    else
    times = times + 28'b1;
    end

endmodule

#####2: 数码管显示模块

module seg(
input clk2,
input [3:0] cnt,
output[6:0] seg
 );

reg [6:0] r_seg;
assign seg = r_seg;


always @(*)
begin
 case(cnt)
 4'b0000: r_seg = 7'b1111110;
 4'b0001: r_seg = 7'b0000110;
 4'b0010: r_seg = 7'b1101101; 
 4'b0011: r_seg = 7'b1111001;
 4'b0100: r_seg = 7'b0110011;
 4'b0101: r_seg = 7'b1011011;
 4'b0110: r_seg = 7'b1011111;
 4'b0111: r_seg = 7'b1110000;
 4'b1000: r_seg = 7'b1111111;
 4'b1001: r_seg = 7'b1111011;
 4'b1010: r_seg = 7'b1110111;
 4'b1011: r_seg = 7'b0011111;
 4'b1100: r_seg = 7'b1001110;
 4'b1101: r_seg = 7'b0111101;
 4'b1110: r_seg = 7'b1001111;
 4'b1111: r_seg = 7'b1000111;
 default: r_seg = 7'b1111111;
  endcase
 end
endmodule

3:主调用模块

module top(
input clk_in1,
output [6:0] seg_display

    );
wire r_cnt;
wire clk1_cnt;
wire clk2_seg;
  clk_wiz_0 instance_name
   (
    // Clock out ports
    .clk_out1(clk1_cnt),     // output clk_out1
    .clk_out2(clk2_seg),     // output clk_out2
    .clk_in1(clk_in1)
    );      // input clk_in1
   cnt instance_cnt(
   .cnt(r_cnt),
   .clk1(clk1_cnt)
   );

   seg instance_seg(
   .seg(seg_display),
   .cnt(r_cnt),
   .clk2(clk2_seg)
   );

endmodule

现在主要由以下问题:

  1. 我上板之后发现有跳动,但一直都是 E(且七个段颜色不一)

  2. 如果要加使能信号,是4个数码管中只有一个 在跳动,那我应该把它放在主文件中当作输入吗?还是在seg这个module中呢?

如果能被解答就太感谢了 !因为被学校强制要求上这个课我也很无奈,自己啥也不会 ,还在学习中。。
PS 标签实在是在不到verilog,好尴尬。。。随便贴了一个,见谅。。

你有做 I/O Pin Planning 嗎? 應該是要把你的seg信號接到某一個數碼管,

還有你命名方式有點難看 (其中一個 cnt既是module name 又是 output reg),

建議是先找網路上的code練習,這個範例很好找,一步步跟著做吧!

參考連結 : https://www.xilinx.com/support/documentation/sw_manuals/xilinx11/pp_p_process_io_pin_planning_pre_syn.htm