📄 receiver.v
字号:
module uart2(clk, rst_n, outdate, outbyte);
input clk, rst_n, outdate;
output [7:0] outbyte;
reg [7:0] outbyte, store;
reg [3:0] counter, st, next_st;
reg pre_outbit;
parameter st_0 = 0, st_1 = 1, st_2 = 2, st_3 = 3, st_4 = 4,
st_5 = 5, st_6 = 6, st_7 = 7, st_8 = 8, st_9 = 9, st_10 = 10, st_11 = 11, st_12 = 12, st_13 = 13;
////////////////////////////////////////
always@(posedge clk or negedge rst_n)
begin
if(rst_n == 0)
st <= st_0;
else
st <= next_st;
end
/////////////////////////////////////////
always@(posedge clk or negedge rst_n)
begin
if(rst_n == 0)
pre_outbit <= 0;
else
pre_outbit <= outdate;
end
/////////////////////////////////////////
always@(posedge clk or negedge rst_n)
begin
if(rst_n == 0)
next_st <= st_0;
else
case(st)
st_0:
begin
if(outdate == 0 && pre_outbit == 1)
begin
counter <= 0;
next_st <= st_1;
end
else
next_st <= st;
end
st_1:
begin
if(counter == 7)
begin
counter <= counter + 1;
if(outdate == 0)
next_st <= st;
else
next_st <= st_0;
end
else if(counter == 15)
begin
counter <= 0;
next_st <= st_2;
end
else
begin
counter <= counter + 1;
next_st <= st;
end
end
st_2:
begin
if(counter == 7)
begin
counter <= counter + 1;
if(outdate == 0)
next_st <= st;
else
next_st <= st_0;
end
else if(counter == 15)
begin
counter <= 0;
next_st <= st_3;
end
else
begin
counter <= counter + 1;
next_st <= st;
end
end
st_3:
begin
if(counter == 7)
begin
store[7] <= outdate;
next_st <= st;
counter <= counter + 1;
end
else if(counter == 15)
begin
counter <= 0;
next_st <= st_4;
end
else
begin
counter <= counter + 1;
next_st <= st;
end
end
st_4:
begin
if(counter == 7)
begin
store[6] <= outdate;
next_st <= st;
counter <= counter + 1;
end
else if(counter == 15)
begin
counter <= 0;
next_st <= st_5;
end
else
begin
counter <= counter + 1;
next_st <= st;
end
end
st_5:
begin
if(counter == 7)
begin
store[5] <= outdate;
next_st <= st;
counter <= counter + 1;
end
else if(counter == 15)
begin
counter <= 0;
next_st <= st_6;
end
else
begin
counter <= counter + 1;
next_st <= st;
end
end
st_6:
begin
if(counter == 7)
begin
store[4] <= outdate;
next_st <= st;
counter <= counter + 1;
end
else if(counter == 15)
begin
counter <= 0;
next_st <= st_7;
end
else
begin
counter <= counter + 1;
next_st <= st;
end
end
st_7:
begin
if(counter == 7)
begin
store[3] <= outdate;
next_st <= st;
counter <= counter + 1;
end
else if(counter == 15)
begin
counter <= 0;
next_st <= st_8;
end
else
begin
counter <= counter + 1;
next_st <= st;
end
end
st_8:
begin
if(counter == 7)
begin
store[2] <= outdate;
next_st <= st;
counter <= counter + 1;
end
else if(counter == 15)
begin
counter <= 0;
next_st <= st_9;
end
else
begin
counter <= counter + 1;
next_st <= st;
end
end
st_9:
begin
if(counter == 7)
begin
store[1] <= outdate;
next_st <= st;
counter <= counter + 1;
end
else if(counter == 15)
begin
counter <= 0;
next_st <= st_10;
end
else
begin
counter <= counter + 1;
next_st <= st;
end
end
st_10:
begin
if(counter == 7)
begin
store[0] <= outdate;
next_st <= st;
counter <= counter + 1;
end
else if(counter == 15)
begin
counter <= 0;
next_st <= st_11;
end
else
begin
counter <= counter + 1;
next_st <= st;
end
end
st_11:
begin
if(counter == 7)
begin
if(outdate == (store[7] + store[6] + store[5] + store[4] + store[3] + store[2] + store[1] + store[0])%2)
begin
next_st <= st;
counter <= counter + 1;
end
else
next_st <= st_0;
end
else if(counter == 15)
begin
counter <= 0;
next_st <= st_12;
end
else
begin
counter <= counter + 1;
next_st <= st;
end
end
st_12:
begin
if(counter == 7)
begin
counter <= counter + 1;
if(outdate == 0)
next_st <= st;
else
next_st <= st_0;
end
else if(counter == 15)
begin
counter <= 0;
next_st <= st_13;
end
else
begin
counter <= counter + 1;
next_st <= st;
end
end
st_13:
begin
if(counter == 7)
begin
counter <= counter + 1;
if(outdate == 0)
next_st <= st;
else
next_st <= st_0;
end
else if(counter == 15)
begin
counter <= 0;
next_st <= st_0;
outbyte <= store;
end
else
begin
counter <= counter + 1;
next_st <= st;
end
end
default:
next_st <= st_0;
endcase
end
////////////////////////////////////////////////////
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -