-
Notifications
You must be signed in to change notification settings - Fork 21
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Read and write the memory via a serial bridge
- drop the dedicated code_mem
- Loading branch information
1 parent
a760865
commit 565988b
Showing
16 changed files
with
2,148 additions
and
174 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
`timescale 1ns / 1ps | ||
module axi_uart | ||
( input wire clk | ||
, input wire reset | ||
|
||
, input wire serial_in | ||
, output wire serial_out | ||
|
||
, output wire tx_ready | ||
, input wire tx_valid | ||
, input wire [7:0] tx_data | ||
|
||
, input wire rx_ready | ||
, output reg rx_valid = 0 | ||
, output reg [7:0] rx_data = 'h XX | ||
); | ||
|
||
parameter frequency = 50_000_000; | ||
parameter bps = 115_200; | ||
|
||
/* Very minimal one-byte buffer */ | ||
|
||
`ifdef __ICARUS__ | ||
assign tx_ready = 1; | ||
`else | ||
assign tx_ready = !rs232tx_busy; | ||
`endif | ||
|
||
wire rs232tx_busy; | ||
wire rs232rx_valid; | ||
wire [ 7:0] rs232rx_q; | ||
|
||
rs232rx rs232rx | ||
( .clock (clk) | ||
, .serial_in (serial_in) | ||
, .valid (rs232rx_valid) | ||
, .q (rs232rx_q)); | ||
defparam | ||
rs232rx.frequency = frequency, | ||
rs232rx.bps = bps; | ||
|
||
rs232tx rs232tx | ||
( .clock (clk) | ||
, .serial_out (serial_out) | ||
, .d (tx_data) | ||
, .we (tx_valid & tx_ready) | ||
, .busy (rs232tx_busy)); | ||
defparam | ||
rs232tx.frequency = frequency, | ||
rs232tx.bps = bps; | ||
|
||
parameter inputtext = {`INITDIR,"input.txt"}; | ||
integer file, ch; | ||
|
||
always @(posedge clk) begin | ||
if (rx_ready & rx_valid) begin | ||
rx_valid <= 0; | ||
|
||
`ifdef __ICARUS__ | ||
$display("RS232 READ %x '%c'", rx_data, rx_data); | ||
ch = $fgetc(file); | ||
if (ch >= 0) begin | ||
rx_valid <= 1; | ||
rx_data <= ch; | ||
end | ||
`endif | ||
end | ||
|
||
if (rs232rx_valid) begin | ||
rx_valid <= 1; | ||
rx_data <= rs232rx_q; | ||
end | ||
end | ||
|
||
`ifdef __ICARUS__ | ||
always @(posedge clk) | ||
if (tx_ready & tx_valid) | ||
$display("RS232 WROTE %x '%c'", tx_data, tx_data); | ||
|
||
initial begin | ||
file = $fopen(inputtext, "r"); | ||
#100 | ||
rx_valid = 1; | ||
end | ||
`endif | ||
endmodule |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
`timescale 1ns / 1ps | ||
//********************************************************************** | ||
// The Xess JTAG UART with a AXI-like interface | ||
//********************************************************************** | ||
module axi_uart( input wire clk | ||
, input wire reset | ||
|
||
, output wire tx_ready | ||
, input wire tx_valid | ||
, input wire [7:0] tx_data | ||
|
||
, input wire rx_ready | ||
, output wire rx_valid | ||
, output wire [7:0] rx_data | ||
); | ||
|
||
wire rx_empty; | ||
reg rx_pop = 0; | ||
|
||
wire tx_full; | ||
reg tx_add = 0; | ||
reg [7:0] tx_data_r; | ||
|
||
// Instantiate the communication interface. | ||
HostIoComm u2( | ||
.reset_i (reset), | ||
.clk_i (clk), | ||
|
||
.rmv_i (rx_pop), // Remove data received from the host. | ||
.data_o (rx_data), // Data from the host. | ||
.dnEmpty_o (rx_empty), | ||
|
||
.add_i (tx_add), // Add received data to FIFO going back to host | ||
.data_i (tx_data_r), // Data to host. | ||
.upFull_o (tx_full) | ||
); | ||
defparam u2.SIMPLE_G = 1; | ||
|
||
assign rx_valid = !rx_empty & !rx_pop; | ||
assign tx_ready = !tx_full & !tx_add; | ||
|
||
always @(posedge clk) begin | ||
rx_pop <= rx_ready & rx_valid; | ||
tx_add <= tx_ready & tx_valid; | ||
tx_data_r <= tx_data; | ||
end | ||
endmodule |
Oops, something went wrong.