なんか知らんけど動いた
diff --git a/verilog/dv/jacaranda_test/jacaranda_test_tb.v b/verilog/dv/jacaranda_test/jacaranda_test_tb.v
index ea53532..fcebc61 100644
--- a/verilog/dv/jacaranda_test/jacaranda_test_tb.v
+++ b/verilog/dv/jacaranda_test/jacaranda_test_tb.v
@@ -46,7 +46,7 @@
$dumpvars(0, jacaranda_test_tb);
// Repeat cycles of 1000 clock edges as needed to complete testbench
- repeat (20) begin
+ repeat (70) begin
repeat (1000) @(posedge clock);
$display("+1000 cycles");
end
diff --git a/verilog/rtl/jacaranda-8/UART/tx.v b/verilog/rtl/jacaranda-8/UART/tx.v
index f1ceadf..8ec107c 100644
--- a/verilog/rtl/jacaranda-8/UART/tx.v
+++ b/verilog/rtl/jacaranda-8/UART/tx.v
@@ -7,30 +7,32 @@
output reg tx;
output wire busy_flag;
- parameter CLK_FREQ = 50_000_000;
+ parameter CLK_FREQ = 40_000_000;
parameter BAUD_RATE = 115200;
parameter CLK_COUNT_BIT = CLK_FREQ / BAUD_RATE;
- reg[1:0] state = 2'b00;
- reg[31:0] clk_count = 32'd0;
- reg[2:0] bit_count = 3'd0;
+ reg[1:0] state;
+ reg[31:0] clk_count;
+ reg[2:0] bit_count;
wire update_flag;
assign update_flag = (clk_count == CLK_COUNT_BIT - 32'd1);
assign busy_flag = ~(state == 2'b00);
always @(posedge reset) begin
+ clk_count <= 32'd0;
tx <= 1'b1;
state <= 2'b00;
bit_count <= 3'd0;
end
+
always @(posedge clk) begin
case(state)
2'b00: begin
tx <= 1'b1;
clk_count = 32'd0;
bit_count <= 3'd0;
- state <= begin_flag & tx_en ? 2'b01 : state;
+ state <= (begin_flag & tx_en) ? 2'b01 : state;
end
2'b01: begin
tx <= 1'b0;
diff --git a/verilog/rtl/jacaranda-8/computer.v b/verilog/rtl/jacaranda-8/computer.v
index 5b20099..4a8692c 100644
--- a/verilog/rtl/jacaranda-8/computer.v
+++ b/verilog/rtl/jacaranda-8/computer.v
@@ -69,7 +69,8 @@
wire receive_flag;
reg tx_en;
reg rx_en;
- reg begin_flag;
+ //reg begin_flag;
+ wire begin_flag;
reg [7:0] tx_data;
wire [7:0] rx_data;
@@ -145,12 +146,13 @@
always @(posedge clock) begin
if(rs_data == 8'd253 && mem_w_en == 1) begin
tx_data <= rd_data;
- begin_flag = 1;
+ //begin_flag = 1;
end else begin
tx_data <= tx_data;
- begin_flag = 0;
+ //begin_flag = 0;
end
end
+ assign begin_flag = (rs_data == 8'd253) & (mem_w_en == 1);
data_mem data_mem(.addr(rs_data),
.w_data(rd_data),