mirror of https://github.com/YosysHQ/icestorm.git
Added icestick rs232 demo
This commit is contained in:
parent
47d28bff12
commit
cd0e6cfa8e
|
|
@ -2,3 +2,7 @@ example.bin
|
|||
example.blif
|
||||
example.asc
|
||||
example.rpt
|
||||
rs232demo.bin
|
||||
rs232demo.blif
|
||||
rs232demo.asc
|
||||
rs232demo.rpt
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
set_io --warn-no-port RX 9
|
||||
set_io --warn-no-port TX 8
|
||||
set_io LED1 99
|
||||
set_io LED2 98
|
||||
set_io LED3 97
|
||||
|
|
|
|||
|
|
@ -0,0 +1,59 @@
|
|||
module top (
|
||||
input clk,
|
||||
input RX,
|
||||
output TX,
|
||||
output reg LED1,
|
||||
output reg LED2,
|
||||
output reg LED3,
|
||||
output reg LED4,
|
||||
output reg LED5
|
||||
);
|
||||
parameter integer BAUD_RATE = 9600;
|
||||
parameter integer CLOCK_FREQ_HZ = 12000000;
|
||||
localparam integer HALF_PERIOD = CLOCK_FREQ_HZ / (2 * BAUD_RATE);
|
||||
|
||||
reg [9:0] buffer;
|
||||
reg buffer_valid;
|
||||
|
||||
reg [$clog2(3*HALF_PERIOD):0] cycle_cnt;
|
||||
reg [3:0] bit_cnt = 0;
|
||||
reg [0:0] state = 0;
|
||||
|
||||
always @(posedge clk) begin
|
||||
buffer_valid <= 0;
|
||||
case (state)
|
||||
0: begin
|
||||
if (!RX) begin
|
||||
cycle_cnt <= HALF_PERIOD;
|
||||
bit_cnt <= 0;
|
||||
state <= 1;
|
||||
end
|
||||
end
|
||||
1: begin
|
||||
if (cycle_cnt == 2*HALF_PERIOD) begin
|
||||
cycle_cnt <= 0;
|
||||
buffer[bit_cnt] <= RX;
|
||||
bit_cnt <= bit_cnt + 1;
|
||||
if (bit_cnt == 9) begin
|
||||
buffer_valid <= 1;
|
||||
state <= 0;
|
||||
end
|
||||
end else begin
|
||||
cycle_cnt <= cycle_cnt + 1;
|
||||
end
|
||||
end
|
||||
endcase
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (buffer_valid) begin
|
||||
if (buffer[8:1] == "1") LED1 <= !LED1;
|
||||
if (buffer[8:1] == "2") LED2 <= !LED2;
|
||||
if (buffer[8:1] == "3") LED3 <= !LED3;
|
||||
if (buffer[8:1] == "4") LED4 <= !LED4;
|
||||
if (buffer[8:1] == "5") LED5 <= !LED5;
|
||||
end
|
||||
end
|
||||
|
||||
assign TX = RX;
|
||||
endmodule
|
||||
Loading…
Reference in New Issue