FPGA基础实验:时间基准电路和带使能的多周期计数器

FPGA基础实验:时间基准电路和带使能的多周期计数器

FPGA基础实验:时间基准电路和带使能的多周期计数器_第1张图片

时间基准电路例化程序:


module cnt_sync(
  CLK   ,   // clock
  CNTVAL,   // counter value
  OV    );  // overflow
input CLK;
output [32-1:0] CNTVAL;
output OV;
parameter MAX_VAL = 25_000_000;
reg [32-1:0] CNTVAL;
reg OV;

always @ (posedge CLK) begin
  if(CNTVAL >= MAX_VAL)
    CNTVAL <= 0;
  else
    CNTVAL <= CNTVAL + 1'b1;
end

always @ (CNTVAL) begin
  if(CNTVAL == MAX_VAL)
    OV = 1'b1;
  else
    OV = 1'b0;
end

endmodule 

带使能的多周期计数器


module cnt_en_0to9(
  CLK   ,   // clock
  CNTVAL,   // counter value
  EN    ,
  OV    );  // overflow
input CLK;
input EN;
output [4-1:0] CNTVAL;
output OV;

reg [4-1:0] CNTVAL;
reg OV;

//同步使能计数器10
always @ (posedge CLK) begin
  if(EN) begin  // work enable
    if(CNTVAL >= 9)
      CNTVAL <= 0;
    else
      CNTVAL <= CNTVAL + 1'b1;
  end
  else
    CNTVAL <= CNTVAL ;  // hold same value
end

always @ (CNTVAL) begin
  if(CNTVAL == 9)
    OV = 1'b1;
  else
    OV = 1'b0;
end

endmodue

通过对程序进行例化,建立BDF文件,添加例化器件进行实验设计。

FPGA基础实验:时间基准电路和带使能的多周期计数器_第2张图片

这里我们是十位计数器,如果我们修改带使能计数器可以得到16位计数器。在这个基础上再添加一个七段数码管,把16位计数器输出结果通过七段译码,用数码管以十六进制进行显示。

数码管例化程序:


module key_smg( clk, incount, smg1 );
    input clk, incount ;
    output smg1 ;

    wire[3:0] incount;
    reg[7:0] smg1 ;
    /************************************
    共阴极数码管
    0xc0,0xf9,0xa4,0xb0,
    0x99,0x92,0x82,0xf8,
    0x80,0x90,0x88,0x83,
    0xc6,0xa1,0x86,0x8e 
    ************************************/
    always@( clk )
        begin
            //个位显示
            case( incount )
                4'h0 : smg1 = 8'hc0 ;
                4'h1 : smg1 = 8'hf9 ;
                4'h2 : smg1 = 8'ha4 ;
                4'h3 : smg1 = 8'hb0 ;
                4'h4 : smg1 = 8'h99 ;
                4'h5 : smg1 = 8'h92 ;
                4'h6 : smg1 = 8'h82 ;
                4'h7 : smg1 = 8'hf8 ;
                4'h8 : smg1 = 8'h80 ;
                4'h9 : smg1 = 8'h90 ;
                4'ha : smg1 = 8'h88 ;
                4'hb : smg1 = 8'h83 ;
                4'hc : smg1 = 8'hc6 ;
                4'hd : smg1 = 8'ha1 ;
                4'he : smg1 = 8'h86 ;
                4'hf : smg1 = 8'h8e ;
            endcase
        end
endmodule

把数码管例化器件添加上并连接,可以通过数码管显示出计数器的实时计数结果。

你可能感兴趣的:(FPGA实验)