分頻器\計數器\led顯示

分頻器\計數器\led顯示

實驗平臺

硬件:使用Xilinx Artix-7 FPGA芯片,具體型號爲XC7A75TFGG484-1。
軟件:Vivado 2018.1

實現功能

1)時鐘分頻器產生1Hz時鐘,設計一個10進制計數器。以遞減方式工作。
2)除了計數器的功能外,通過板上撥動開關,增加右移和循環右移運行模式,移動速度同計數器的計數頻率。
3)通過板上撥動開關,選擇計數器可以以遞增或遞減模式工作,可以實現計數器計數頻率的變化

代碼

top.v

`timescale 1ns / 1ps

module top( 
	input rst, 
	input clk,//100MHz
	input flag,//counter
	input flag1,//Hz
	input flag2,  //display
	output [7:0] led
);   
wire divclk;  
     divclk U1(.rst1(rst),.flag1(flag1),.clk1(clk),.divclk1(divclk));   
     led U2(.rst2(rst),.divclk2(divclk),.flag(flag),.flag2(flag2),.led8(led)); 
endmodule 

divclk.v

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2019/12/07 21:12:09
// Design Name: 
// Module Name: divclk
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////

module divclk(
	input clk1,//100MHz
	input rst1,//
	input flag1,//
	output reg divclk1//
);
reg[31:0] counter1; 
always @(posedge clk1 or posedge rst1)
begin
if(rst1) 
begin         
  counter1<=0;  
 divclk1<=0;    
 end    
else   
if(flag1==0)
begin
  if(counter1==32'h02faf07f) //1Hz
      begin  
      counter1<=0;
      divclk1<=~divclk1; 
      end    
  else    
      counter1<=counter1+1;   
end

else if(flag1==1)
begin
  if(counter1==32'h04c4b3f) //10Hz
      begin  
      counter1<=0;
      divclk1<=~divclk1; 
      end    
  else    
      counter1<=counter1+1;   
end
end   
endmodule 

led.v

`timescale 1ns / 1ps 

module led( 
	input divclk2, 
	input rst2,
	input flag,//counter
	input flag2, //display
	output reg [7:0] led8    
); 

reg[3:0] counter2;
always@( posedge divclk2 or posedge rst2 )
begin
    if(flag==0)
        begin
        if(rst2)
        counter2<=9;
        else 
            begin
            if(counter2==0)
            counter2<=9; 
            else      
            counter2<=counter2-1;
            end   
        end
    else if(flag==1)
        begin
        if(rst2)
            counter2<=0;
        else 
            begin
            if(counter2==9)
            counter2<=0; 
            else      
            counter2<=counter2+1;
            end
        end   
end

//display
always @*   
  begin
  if(flag2==0)
  begin    
  case(counter2)   
     4'b0000:  led8=8'b00000001;   
     4'b0001:  led8=8'b00000010;    
     4'b0010:  led8=8'b00000100;
     4'b0011:  led8=8'b00001000; 
     4'b0100:  led8=8'b00010000;    
     4'b0101:  led8=8'b00100000;   
     4'b0110:  led8=8'b01000000;   
     4'b0111:  led8=8'b10000000;     
     default:  led8=8'b00000000;         
  endcase
  end
  else if(flag2==1)
  begin
    case(counter2)   
     4'b0000:  led8=8'b00000000;    
     4'b0001:  led8=8'b00000001;    
     4'b0010:  led8=8'b00000010;
     4'b0011:  led8=8'b00000011; 
     4'b0100:  led8=8'b00000100;    
     4'b0101:  led8=8'b00000101;   
     4'b0110:  led8=8'b00000110;   
     4'b0111:  led8=8'b00000111;   
     4'b1000:  led8=8'b00001000;   
     4'b1001:  led8=8'b00001001;         
     default:  led8=8'b11111111;     
  endcase
  end 
  end
endmodule 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章