Advertisement
Guest User

Untitled

a guest
Jul 3rd, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* V_5_10
  2. Funkció: A BTN0 (reset jel) gomb hatására  a SW0-SW7 kapcsolókkal beállíthatott értékek megjelennek a
  3. jobb oldali hétszegmenses kijelzőn. A BTN0 gomb felengedése után  ezek az értékek kb. másodpercenként
  4. shiftelődnek  egy  visszacsatolt balra shiftelő regiszterben,  miközben  az  aktuális  értékek  megjelennek a
  5. hétszegmenses kijelzőn. A hálózat órajele az FPGA panel 50 MHz-es  órajele.  A  shiftelést  egy kb.
  6. másodpercenként érkező, 1 órajel szélességű engedélyező jel ütemezi. Ezt a jelet is a hálózat állítja elő.
  7. */
  8.  
  9. //Verilog Module
  10.  
  11. `timescale 1ns / 1ps
  12.  
  13. module topmod(
  14.     input clk,
  15.     input [7:0] sw17,
  16.     input btn0,
  17.     output [3:0] AN,
  18.     output reg [6:0] SEG7
  19.     );
  20.      
  21.     reg [26:0] cntr;
  22.     wire en;
  23.    
  24.    always @(posedge clk)
  25.       if (btn0 | en)
  26.          cntr <= 0;
  27.       else cntr <= cntr + 1;
  28.        
  29.     assign en = ( cntr == 49999999 );
  30.                    
  31.    
  32.    reg [7:0] shr;
  33.  
  34.    always @(posedge clk)
  35.       if (btn0) begin
  36.          shr  <= sw17;
  37.       end
  38.       else if (en) begin
  39.          shr <= {shr[6:0],shr[7]};
  40.       end
  41.        
  42.     reg cntr2;
  43.     wire en2;
  44.    
  45.    always @(posedge clk)
  46.       if (btn0 | en2)
  47.          cntr2 <= 0;
  48.       else cntr2 <= cntr2 + 1;
  49.        
  50.     assign en2 = (cntr2 == 1500000);
  51.        
  52.     wire [3:0] num = en2 ? shr[7:4] : shr[3:0];
  53.     assign AN = en2 ? 4'b1101 : 4'b1110;
  54.  
  55.       always @(*)
  56.       case (num)
  57.           4'b0001 : SEG7 = 7'b1111001;   // 1
  58.           4'b0010 : SEG7 = 7'b0100100;   // 2
  59.           4'b0011 : SEG7 = 7'b0110000;   // 3
  60.           4'b0100 : SEG7 = 7'b0011001;   // 4
  61.           4'b0101 : SEG7 = 7'b0010010;   // 5
  62.           4'b0110 : SEG7 = 7'b0000010;   // 6
  63.           4'b0111 : SEG7 = 7'b1111000;   // 7
  64.           4'b1000 : SEG7 = 7'b0000000;   // 8
  65.           4'b1001 : SEG7 = 7'b0010000;   // 9
  66.           4'b1010 : SEG7 = 7'b0001000;   // A
  67.           4'b1011 : SEG7 = 7'b0000011;   // b
  68.           4'b1100 : SEG7 = 7'b1000110;   // C
  69.           4'b1101 : SEG7 = 7'b0100001;   // d
  70.           4'b1110 : SEG7 = 7'b0000110;   // E
  71.           4'b1111 : SEG7 = 7'b0001110;   // F
  72.           default : SEG7 = 7'b1000000;   // 0
  73.       endcase
  74.  
  75.  
  76. endmodule
  77.  
  78.  
  79. //Verilog Test Fixture
  80.  
  81. module tb_topmod;
  82.  
  83.     // Inputs
  84.     reg clk;
  85.     reg [7:0] sw17;
  86.     reg btn0;
  87.  
  88.     // Outputs
  89.     wire AN4;
  90.     wire [6:0] SEG7;
  91.  
  92.     // Instantiate the Unit Under Test (UUT)
  93.     topmod uut (
  94.         .clk(clk),
  95.         .sw17(sw17),
  96.         .btn0(btn0),
  97.         .AN(AN),
  98.         .SEG7(SEG7)
  99.     );
  100.  
  101.     initial begin
  102.         // Initialize Inputs
  103.         clk = 0;
  104.         sw17 = 01110011;
  105.         btn0 = 1;
  106.  
  107.         // Wait 100 ns for global reset to finish
  108.         #100;
  109.        
  110.         btn0 <= 0;
  111.        
  112.         // Add stimulus here
  113.  
  114.     end
  115.    
  116.     always #10 clk <= ~clk;
  117.      
  118. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement