Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //MODULE
- module bcdmatriz (
- // PORTS
- // Direction Type Size Name
- input clk,rst,
- input [3:0] units,tens,hundreds,thousands,
- output [9:0] x,
- output reg [9:0] y
- );
- //WIRES AND REGISTERS
- //Time Control Variables
- reg [15:0] counter_ms;
- reg enable_ms;
- parameter mseconds = 32768;
- reg [22:0] counter_shift;
- reg enable_shift;
- parameter shift = 4194304;
- reg [3:0] i;
- wire [9:0] memx[10][10]; //Ancho Alto Profunidad
- reg [9:0] memy;
- reg [19:0] shift_reg;
- reg [5:0] shift_counter;
- //ASIGNACIONES
- //SEÑALES
- assign memx[0][0] = 10'b0011111100;
- assign memx[1][0] = 10'b0111111110;
- assign memx[2][0] = 10'b0110000110;
- assign memx[3][0] = 10'b0110000110;
- assign memx[4][0] = 10'b0110000110;
- assign memx[5][0] = 10'b0110000110;
- assign memx[6][0] = 10'b0110000110;
- assign memx[7][0] = 10'b0110000110;
- assign memx[8][0] = 10'b0011111100;
- assign memx[9][0] = 10'b0011111100;
- assign memx[0][1] = 10'b0000110000;
- assign memx[1][1] = 10'b0001110000;
- assign memx[2][1] = 10'b0011110000;
- assign memx[3][1] = 10'b0110110000;
- assign memx[4][1] = 10'b0000110000;
- assign memx[5][1] = 10'b0000110000;
- assign memx[6][1] = 10'b0000110000;
- assign memx[7][1] = 10'b0000110000;
- assign memx[8][1] = 10'b0111111110;
- assign memx[9][1] = 10'b0111111110;
- assign memx[0][2] = 10'b0111111110;
- assign memx[1][2] = 10'b0111111110;
- assign memx[2][2] = 10'b0000000110;
- assign memx[3][2] = 10'b0000000110;
- assign memx[4][2] = 10'b0111111110;
- assign memx[5][2] = 10'b0111111110;
- assign memx[6][2] = 10'b0110000000;
- assign memx[7][2] = 10'b0110000000;
- assign memx[8][2] = 10'b0111111110;
- assign memx[9][2] = 10'b0111111110;
- assign memx[0][3] = 10'b0111111110;
- assign memx[1][3] = 10'b0111111110;
- assign memx[2][3] = 10'b0000000110;
- assign memx[3][3] = 10'b0000000110;
- assign memx[4][3] = 10'b0111111110;
- assign memx[5][3] = 10'b0111111110;
- assign memx[6][3] = 10'b0000000110;
- assign memx[7][3] = 10'b0000000110;
- assign memx[8][3] = 10'b0111111110;
- assign memx[9][3] = 10'b0111111110;
- assign memx[0][4] = 10'b0110000110;
- assign memx[1][4] = 10'b0110000110;
- assign memx[2][4] = 10'b0110000110;
- assign memx[3][4] = 10'b0110000110;
- assign memx[4][4] = 10'b0111111110;
- assign memx[5][4] = 10'b0111111110;
- assign memx[6][4] = 10'b0000000110;
- assign memx[7][4] = 10'b0000000110;
- assign memx[8][4] = 10'b0000000110;
- assign memx[9][4] = 10'b0000000110;
- assign memx[0][5] = 10'b0111111110;
- assign memx[1][5] = 10'b0111111110;
- assign memx[2][5] = 10'b0110000000;
- assign memx[3][5] = 10'b0110000000;
- assign memx[4][5] = 10'b0111111110;
- assign memx[5][5] = 10'b0111111110;
- assign memx[6][5] = 10'b0000000110;
- assign memx[7][5] = 10'b0000000110;
- assign memx[8][5] = 10'b0111111110;
- assign memx[9][5] = 10'b0111111110;
- assign memx[0][6] = 10'b0111111110;
- assign memx[1][6] = 10'b0111111110;
- assign memx[2][6] = 10'b0110000000;
- assign memx[3][6] = 10'b0110000000;
- assign memx[4][6] = 10'b0111111110;
- assign memx[5][6] = 10'b0111111110;
- assign memx[6][6] = 10'b0110000110;
- assign memx[7][6] = 10'b0110000110;
- assign memx[8][6] = 10'b0111111110;
- assign memx[9][6] = 10'b0111111110;
- assign memx[0][7] = 10'b0111111110;
- assign memx[1][7] = 10'b0111111110;
- assign memx[2][7] = 10'b0000000110;
- assign memx[3][7] = 10'b0000000110;
- assign memx[4][7] = 10'b0000001100;
- assign memx[5][7] = 10'b0000011000;
- assign memx[6][7] = 10'b0000110000;
- assign memx[7][7] = 10'b0001100000;
- assign memx[8][7] = 10'b0011000000;
- assign memx[9][7] = 10'b0110000000;
- assign memx[0][8] = 10'b0011111100;
- assign memx[1][8] = 10'b0111111110;
- assign memx[2][8] = 10'b0110000110;
- assign memx[3][8] = 10'b0110000110;
- assign memx[4][8] = 10'b0011111100;
- assign memx[5][8] = 10'b0111111110;
- assign memx[6][8] = 10'b0110000110;
- assign memx[7][8] = 10'b0110000110;
- assign memx[8][8] = 10'b0111111110;
- assign memx[9][8] = 10'b0011111100;
- assign memx[0][9] = 10'b0011111100;
- assign memx[1][9] = 10'b0111111110;
- assign memx[2][9] = 10'b0110000110;
- assign memx[3][9] = 10'b0110000110;
- assign memx[4][9] = 10'b0111111110;
- assign memx[5][9] = 10'b0011111110;
- assign memx[6][9] = 10'b0000000110;
- assign memx[7][9] = 10'b0000000110;
- assign memx[8][9] = 10'b0111111110;
- assign memx[9][9] = 10'b0111111100;
- assign x = shift_reg[19:10];
- //Valor [ inicio +/- desplazamiento ]
- //Control Enable
- always @( posedge clk )
- begin
- if ( rst )
- begin
- counter_ms <= 15'd0;
- counter_shift <= 22'd0;
- enable_ms <= 0;
- enable_shift <= 0;
- end
- else
- begin
- enable_ms <= 0;
- enable_shift <= 0;
- counter_ms <= counter_ms + 15'd1;
- counter_shift <= counter_shift + 22'd1;
- if ( counter_ms == (mseconds - 1) )
- begin
- enable_ms <= 1;
- end
- else if ( counter_shift == ( shift - 1) )
- begin
- enable_shift <= 1;
- end
- end
- end
- //Memy control
- always @(posedge clk)
- begin
- if (rst)
- begin
- y <= 10'b1111111110;
- end
- else if ( enable_ms )
- begin
- y <= {y[8:0], y[9]};
- end
- end
- //CONTROL VERTICAL
- always@(posedge clk)
- begin
- if ( enable_ms )
- begin
- if(rst | i==9)
- i <= 0;
- else
- i <= i+ 4'd1;
- end
- end
- //CONTROL DE DESPLAZAMIENTO
- //LOADING DATA
- always @( posedge clk )
- begin
- if ( rst || ( shift_counter == 30 ) )
- begin
- shift_counter <= 5'd0;
- end
- else
- begin
- if ( shift_counter >= 0 && shift_counter <= 10 ) // Load Data
- shift_reg <= { memx[i][tens] , memx[i][units] };
- else if ( shift_counter >= 11 && shift_counter <= 20 )
- shift_reg <= { memx[i][hundreds] , memx[i][tens] };
- else
- shift_reg <= { memx[i][thousands] , memx[i][hundreds] };
- if ( enable_shift )
- begin
- shift_reg <= shift_reg << 1; // Shift to left
- shift_counter <= shift_counter + 5'd0;
- end
- end
- end
- endmodule
Advertisement
Add Comment
Please, Sign In to add comment