yayacemu/rng.sv

20 lines
489 B
Systemverilog
Raw Normal View History

2024-02-01 02:57:11 +00:00
module rng (
input wire clk_in,
input wire [15:0] pc,
2024-02-01 03:04:52 +00:00
input bit keyboard[15:0],
2024-02-01 02:57:11 +00:00
input int cycle_counter,
output bit [7:0] rand_bit
2024-02-01 03:04:52 +00:00
);
2024-02-01 02:57:11 +00:00
2024-02-01 03:04:52 +00:00
bit [7:0] last;
always_ff @(posedge clk_in) begin
for (int i = 0; i < 8; i++) begin
rand_bit[i] ^= ~keyboard[i] ? cycle_counter[i] : cycle_counter[7-i];
rand_bit[i] ^= (cycle_counter % 7) == 0 ? pc[i] : ~pc[i];
rand_bit[i] ^= keyboard[i+7] ? ~last[i] : last[i];
2024-02-01 02:57:11 +00:00
end
2024-02-01 03:04:52 +00:00
last = rand_bit;
end
2024-02-01 02:57:11 +00:00
endmodule