draw bug fix, beeper, and rng (tetris works)
This commit is contained in:
parent
6ef29f55e7
commit
a3960bb56d
|
@ -85,3 +85,7 @@ set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to row[0]
|
||||||
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to row[1]
|
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to row[1]
|
||||||
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to row[2]
|
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to row[2]
|
||||||
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to row
|
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to row
|
||||||
|
|
||||||
|
|
||||||
|
set_location_assignment PIN_AH19 -to beep
|
||||||
|
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to beep
|
||||||
|
|
8
cpu.sv
8
cpu.sv
|
@ -444,6 +444,7 @@ logic [5:0] lcd_led;
|
||||||
instr.src_sprite_vy <= opcode[7:4];
|
instr.src_sprite_vy <= opcode[7:4];
|
||||||
instr.src_sprite_idx <= 0;
|
instr.src_sprite_idx <= 0;
|
||||||
|
|
||||||
|
|
||||||
state <= ST_FETCH_MEM;
|
state <= ST_FETCH_MEM;
|
||||||
end
|
end
|
||||||
16'hE?9E: begin
|
16'hE?9E: begin
|
||||||
|
@ -569,7 +570,6 @@ logic [5:0] lcd_led;
|
||||||
state <= ST_FETCH_MEM;
|
state <= ST_FETCH_MEM;
|
||||||
end
|
end
|
||||||
default: begin
|
default: begin
|
||||||
$display("ILLEGAL INSTRUCTION %h at PC 0x%h (%0d)", opcode, program_counter, program_counter);
|
|
||||||
state <= ST_HALT;
|
state <= ST_HALT;
|
||||||
end
|
end
|
||||||
endcase
|
endcase
|
||||||
|
@ -594,7 +594,7 @@ logic [5:0] lcd_led;
|
||||||
rd_memory_address <= instr.src_sprite_addr + {7'b0000000, instr.src_sprite_idx};
|
rd_memory_address <= instr.src_sprite_addr + {7'b0000000, instr.src_sprite_idx};
|
||||||
instr.src_sprite_idx <= instr.src_sprite_idx + 1;
|
instr.src_sprite_idx <= instr.src_sprite_idx + 1;
|
||||||
for (int l = 0; l < 8; l++)
|
for (int l = 0; l < 8; l++)
|
||||||
instr.src_sprite[(instr.src_sprite_idx)*8+l] <= rd_memory_data[7-l];
|
instr.src_sprite[(instr.src_sprite_idx-1)*8+l] <= rd_memory_data[7-l];
|
||||||
end else begin
|
end else begin
|
||||||
instr.src_sprite_x <= registers[instr.src_sprite_vx] % 8'd64;
|
instr.src_sprite_x <= registers[instr.src_sprite_vx] % 8'd64;
|
||||||
instr.src_sprite_y <= registers[instr.src_sprite_vy] % 8'd32;
|
instr.src_sprite_y <= registers[instr.src_sprite_vy] % 8'd32;
|
||||||
|
@ -619,7 +619,7 @@ logic [5:0] lcd_led;
|
||||||
registers[15] <= 0;
|
registers[15] <= 0;
|
||||||
end
|
end
|
||||||
end else begin
|
end else begin
|
||||||
if (draw_state.r == instr.src_sprite_sz + 1) begin
|
if (draw_state.r == instr.src_sprite_sz) begin
|
||||||
state <= ST_CLEANUP;
|
state <= ST_CLEANUP;
|
||||||
program_counter <= program_counter + 2;
|
program_counter <= program_counter + 2;
|
||||||
end else begin
|
end else begin
|
||||||
|
@ -692,7 +692,6 @@ logic [5:0] lcd_led;
|
||||||
BCD: begin
|
BCD: begin
|
||||||
instr.src <= BYTE;
|
instr.src <= BYTE;
|
||||||
ldl_cnt <= ldl_cnt + 1;
|
ldl_cnt <= ldl_cnt + 1;
|
||||||
$display("%0d ldl", ldl_cnt);
|
|
||||||
case (ldl_cnt)
|
case (ldl_cnt)
|
||||||
0: begin
|
0: begin
|
||||||
instr.src_byte <= (registers[instr.src_reg]/100) % 10;
|
instr.src_byte <= (registers[instr.src_reg]/100) % 10;
|
||||||
|
@ -784,7 +783,6 @@ logic [5:0] lcd_led;
|
||||||
end
|
end
|
||||||
IOW: begin
|
IOW: begin
|
||||||
if (|keymap != 0 && wait_key[12] == 1) begin
|
if (|keymap != 0 && wait_key[12] == 1) begin
|
||||||
$display("IO not waiting");
|
|
||||||
for(int m = 0; m < 16; m++) begin
|
for(int m = 0; m < 16; m++) begin
|
||||||
if (keymap[m]) begin
|
if (keymap[m]) begin
|
||||||
wait_key[11:0] <= m[11:0];
|
wait_key[11:0] <= m[11:0];
|
||||||
|
|
19
rng.sv
Normal file
19
rng.sv
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
module rng (
|
||||||
|
input wire clk_in,
|
||||||
|
input wire [15:0] bor16,
|
||||||
|
input bit [15:0] keyboard,
|
||||||
|
input int cycle_counter,
|
||||||
|
output bit [7:0] rand_bit
|
||||||
|
);
|
||||||
|
|
||||||
|
bit [7:0] last;
|
||||||
|
|
||||||
|
always_ff @(posedge clk_in) begin
|
||||||
|
for (int i = 0; i < 5; i++) begin
|
||||||
|
rand_bit[i] <= ~keyboard[i == 0 ? 7 : i-1] ? cycle_counter[i] : cycle_counter[7-i];
|
||||||
|
rand_bit[i+1%8] <= rand_bit[i] ^ (cycle_counter % 7) == 0 ? bor16[i] : ~bor16[i];
|
||||||
|
rand_bit[i+2%8] <= rand_bit[i+1%8] ^ keyboard[i+7] ? ~last[i] : last[i];
|
||||||
|
end
|
||||||
|
last <= rand_bit;
|
||||||
|
end
|
||||||
|
endmodule
|
Loading…
Reference in a new issue