GhostUuU

bcdmatriz

Oct 30th, 2024
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SystemVerilog 6.05 KB | Source Code | 0 0
  1. //MODULE
  2. module bcdmatriz (
  3.     // PORTS
  4.     // Direction    Type        Size            Name
  5.         input                                   clk,rst,
  6.         input                       [3:0]           units,tens,hundreds,thousands,
  7.         output                  [9:0]           x,
  8.         output      reg     [9:0]       y
  9.    
  10.     );
  11.    
  12.     //WIRES AND REGISTERS
  13.     //Time Control Variables
  14.    
  15.                         reg     [15:0]      counter_ms;
  16.                         reg                     enable_ms;
  17.                         parameter               mseconds = 32768;
  18.                    
  19.                         reg     [22:0]      counter_shift;
  20.                         reg                     enable_shift;
  21.                         parameter               shift = 4194304;
  22.                        
  23.                        
  24.                         reg [3:0]       i;
  25.                         wire    [9:0]       memx[10][10]; //Ancho Alto Profunidad
  26.                        
  27.                         reg [9:0]       memy;
  28.                         reg [19:0]  shift_reg;
  29.                         reg [5:0]       shift_counter;
  30.                        
  31.  
  32. //ASIGNACIONES
  33.     //SEÑALES
  34.    
  35.  
  36.     assign  memx[0][0]  =   10'b0011111100;
  37.     assign  memx[1][0]  =   10'b0111111110;
  38.     assign  memx[2][0]  =   10'b0110000110;
  39.     assign  memx[3][0]  =   10'b0110000110;
  40.     assign  memx[4][0]  =   10'b0110000110;
  41.     assign  memx[5][0]  =   10'b0110000110;
  42.     assign  memx[6][0]  =   10'b0110000110;
  43.     assign  memx[7][0]  =   10'b0110000110;
  44.     assign  memx[8][0]  =   10'b0011111100;
  45.     assign  memx[9][0]  =   10'b0011111100;
  46.  
  47.     assign  memx[0][1]  =   10'b0000110000;
  48.     assign  memx[1][1]  =   10'b0001110000;
  49.     assign  memx[2][1]  =   10'b0011110000;
  50.     assign  memx[3][1]  =   10'b0110110000;
  51.     assign  memx[4][1]  =   10'b0000110000;
  52.     assign  memx[5][1]  =   10'b0000110000;
  53.     assign  memx[6][1]  =   10'b0000110000;
  54.     assign  memx[7][1]  =   10'b0000110000;
  55.     assign  memx[8][1]  =   10'b0111111110;
  56.     assign  memx[9][1]  =   10'b0111111110;
  57.  
  58.     assign  memx[0][2]  =   10'b0111111110;
  59.     assign  memx[1][2]  =   10'b0111111110;
  60.     assign  memx[2][2]  =   10'b0000000110;
  61.     assign  memx[3][2]  =   10'b0000000110;
  62.     assign  memx[4][2]  =   10'b0111111110;
  63.     assign  memx[5][2]  =   10'b0111111110;
  64.     assign  memx[6][2]  =   10'b0110000000;
  65.     assign  memx[7][2]  =   10'b0110000000;
  66.     assign  memx[8][2]  =   10'b0111111110;
  67.     assign  memx[9][2]  =   10'b0111111110;
  68.  
  69.     assign  memx[0][3]  =   10'b0111111110;
  70.     assign  memx[1][3]  =   10'b0111111110;
  71.     assign  memx[2][3]  =   10'b0000000110;
  72.     assign  memx[3][3]  =   10'b0000000110;
  73.     assign  memx[4][3]  =   10'b0111111110;
  74.     assign  memx[5][3]  =   10'b0111111110;
  75.     assign  memx[6][3]  =   10'b0000000110;
  76.     assign  memx[7][3]  =   10'b0000000110;
  77.     assign  memx[8][3]  =   10'b0111111110;
  78.     assign  memx[9][3]  =   10'b0111111110;
  79.    
  80.     assign  memx[0][4]  =   10'b0110000110;
  81.     assign  memx[1][4]  =   10'b0110000110;
  82.     assign  memx[2][4]  =   10'b0110000110;
  83.     assign  memx[3][4]  =   10'b0110000110;
  84.     assign  memx[4][4]  =   10'b0111111110;
  85.     assign  memx[5][4]  =   10'b0111111110;
  86.     assign  memx[6][4]  =   10'b0000000110;
  87.     assign  memx[7][4]  =   10'b0000000110;
  88.     assign  memx[8][4]  =   10'b0000000110;
  89.     assign  memx[9][4]  =   10'b0000000110;
  90.  
  91.  
  92.     assign  memx[0][5]  =   10'b0111111110;
  93.     assign  memx[1][5]  =   10'b0111111110;
  94.     assign  memx[2][5]  =   10'b0110000000;
  95.     assign  memx[3][5]  =   10'b0110000000;
  96.     assign  memx[4][5]  =   10'b0111111110;
  97.     assign  memx[5][5]  =   10'b0111111110;
  98.     assign  memx[6][5]  =   10'b0000000110;
  99.     assign  memx[7][5]  =   10'b0000000110;
  100.     assign  memx[8][5]  =   10'b0111111110;
  101.     assign  memx[9][5]  =   10'b0111111110;
  102.  
  103.     assign  memx[0][6]  =   10'b0111111110;
  104.     assign  memx[1][6]  =   10'b0111111110;
  105.     assign  memx[2][6]  =   10'b0110000000;
  106.     assign  memx[3][6]  =   10'b0110000000;
  107.     assign  memx[4][6]  =   10'b0111111110;
  108.     assign  memx[5][6]  =   10'b0111111110;
  109.     assign  memx[6][6]  =   10'b0110000110;
  110.     assign  memx[7][6]  =   10'b0110000110;
  111.     assign  memx[8][6]  =   10'b0111111110;
  112.     assign  memx[9][6]  =   10'b0111111110;
  113.  
  114.     assign  memx[0][7]  =   10'b0111111110;
  115.     assign  memx[1][7]  =   10'b0111111110;
  116.     assign  memx[2][7]  =   10'b0000000110;
  117.     assign  memx[3][7]  =   10'b0000000110;
  118.     assign  memx[4][7]  =   10'b0000001100;
  119.     assign  memx[5][7]  =   10'b0000011000;
  120.     assign  memx[6][7]  =   10'b0000110000;
  121.     assign  memx[7][7]  =   10'b0001100000;
  122.     assign  memx[8][7]  =   10'b0011000000;
  123.     assign  memx[9][7]  =   10'b0110000000;
  124.  
  125.     assign  memx[0][8]  =   10'b0011111100;
  126.     assign  memx[1][8]  =   10'b0111111110;
  127.     assign  memx[2][8]  =   10'b0110000110;
  128.     assign  memx[3][8]  =   10'b0110000110;
  129.     assign  memx[4][8]  =   10'b0011111100;
  130.     assign  memx[5][8]  =   10'b0111111110;
  131.     assign  memx[6][8]  =   10'b0110000110;
  132.     assign  memx[7][8]  =   10'b0110000110;
  133.     assign  memx[8][8]  =   10'b0111111110;
  134.     assign  memx[9][8]  =   10'b0011111100;
  135.  
  136.     assign  memx[0][9]  =   10'b0011111100;
  137.     assign  memx[1][9]  =   10'b0111111110;
  138.     assign  memx[2][9]  =   10'b0110000110;
  139.     assign  memx[3][9]  =   10'b0110000110;
  140.     assign  memx[4][9]  =   10'b0111111110;
  141.     assign  memx[5][9]  =   10'b0011111110;
  142.     assign  memx[6][9]  =   10'b0000000110;
  143.     assign  memx[7][9]  =   10'b0000000110;
  144.     assign  memx[8][9]  =   10'b0111111110;
  145.     assign  memx[9][9]  =   10'b0111111100;
  146.    
  147.     assign  x    = shift_reg[19:10];
  148.    
  149.     //Valor [ inicio +/- desplazamiento ]
  150.    
  151.     //Control Enable
  152.    
  153. always @( posedge clk )
  154. begin
  155.     if ( rst )
  156.     begin
  157.         counter_ms <= 15'd0;
  158.         counter_shift <= 22'd0;    
  159.         enable_ms  <= 0;
  160.         enable_shift <= 0;
  161.     end
  162.    
  163.     else
  164.     begin
  165.         enable_ms     <= 0;
  166.         enable_shift  <= 0;
  167.         counter_ms    <= counter_ms + 15'd1;
  168.         counter_shift <= counter_shift + 22'd1;
  169.        
  170.         if ( counter_ms == (mseconds - 1) )
  171.         begin
  172.             enable_ms <= 1;
  173.         end
  174.        
  175.         else if ( counter_shift == ( shift - 1) )
  176.         begin
  177.             enable_shift <= 1;
  178.         end
  179.        
  180.     end
  181. end
  182.    
  183.    
  184. //Memy control
  185.    
  186. always @(posedge clk)
  187. begin
  188.    
  189.     if (rst)
  190.      
  191.         begin
  192.         y <= 10'b1111111110;
  193.         end
  194.      
  195.     else if ( enable_ms )
  196.          
  197.          begin
  198.               y <= {y[8:0], y[9]};
  199.          end
  200.      
  201. end
  202.    
  203.    
  204. //CONTROL VERTICAL
  205. always@(posedge clk)
  206. begin
  207.  
  208.     if ( enable_ms )
  209.        
  210.     begin
  211.         if(rst | i==9)
  212.             i <= 0;
  213.         else
  214.             i <= i+ 4'd1;
  215.     end
  216.        
  217. end
  218.    
  219. //CONTROL DE DESPLAZAMIENTO
  220.  
  221. //LOADING DATA
  222.  
  223. always @( posedge clk )
  224.     begin
  225.         if ( rst || ( shift_counter == 30 ) )
  226.        
  227.         begin
  228.             shift_counter <= 5'd0;
  229.         end
  230.        
  231.         else
  232.        
  233.         begin
  234.         if ( shift_counter >= 0 && shift_counter <= 10 )        // Load Data
  235.           shift_reg <= { memx[i][tens] , memx[i][units] };
  236.         else if ( shift_counter >= 11 && shift_counter <= 20 )
  237.             shift_reg <= { memx[i][hundreds] , memx[i][tens] };
  238.         else
  239.             shift_reg <= { memx[i][thousands] , memx[i][hundreds] };
  240.  
  241.          if ( enable_shift )
  242.          begin
  243.               shift_reg <= shift_reg << 1; // Shift to left
  244.               shift_counter <= shift_counter + 5'd0;   
  245.          end
  246.          
  247.         end
  248. end
  249.  
  250.  
  251. endmodule  
Advertisement
Add Comment
Please, Sign In to add comment