commit the gray_2_bin asy_handshake
This commit is contained in:
parent
b546caabba
commit
89392690ec
|
@ -0,0 +1,133 @@
|
||||||
|
//==========================================================
|
||||||
|
//--Author : colonel
|
||||||
|
//--Date : 11-14
|
||||||
|
//--Module : asy_handshake_data
|
||||||
|
//--Function: use handshake to asy the data
|
||||||
|
//==========================================================
|
||||||
|
module asy_handshake_data(
|
||||||
|
input tclk,
|
||||||
|
input t_rstn,
|
||||||
|
input rclk,
|
||||||
|
input r_rstn,
|
||||||
|
input [4:0] data_in,
|
||||||
|
|
||||||
|
output [4:0] data_out
|
||||||
|
);
|
||||||
|
|
||||||
|
//==========================< 信号 >=========================
|
||||||
|
wire ack;
|
||||||
|
wire req;
|
||||||
|
reg [4:0] data_reg;
|
||||||
|
|
||||||
|
//==========================< instance >====================
|
||||||
|
tx u_tx(
|
||||||
|
.tclk(tclk),
|
||||||
|
.t_rstn(t_rstn),
|
||||||
|
.i_ack(ack),
|
||||||
|
.i_data_in(data_in),
|
||||||
|
.o_req(req),
|
||||||
|
.o_tx_data(data_reg)
|
||||||
|
);
|
||||||
|
|
||||||
|
rx u_rx(
|
||||||
|
.rclk(rclk),
|
||||||
|
.r_rstn(r_rstn),
|
||||||
|
.i_req(req),
|
||||||
|
.i_data_in(data_reg),
|
||||||
|
.o_ack(ack),
|
||||||
|
.o_rx_data(data_out)
|
||||||
|
);
|
||||||
|
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
//=============================tx_module=====================
|
||||||
|
module tx (
|
||||||
|
input tclk,
|
||||||
|
input t_rstn,
|
||||||
|
input i_ack,
|
||||||
|
input [4:0] i_data_in,
|
||||||
|
output reg o_req,
|
||||||
|
output reg[4:0] o_tx_data
|
||||||
|
);
|
||||||
|
|
||||||
|
//==========================< 信号 >=========================
|
||||||
|
reg des_sync_src_ack_1;
|
||||||
|
reg des_sync_src_ack_2;
|
||||||
|
|
||||||
|
always @(posedge tclk or negedge t_rstn) begin
|
||||||
|
if (!t_rstn) begin
|
||||||
|
des_sync_src_ack_1 <= 1'b0;
|
||||||
|
des_sync_src_ack_2 <= 1'b0;
|
||||||
|
end else begin
|
||||||
|
des_sync_src_ack_1 <= i_ack;
|
||||||
|
des_sync_src_ack_2 <= des_sync_src_ack_1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
wire des_sync_src_neg = !des_sync_src_ack_1 & des_sync_src_ack_2;
|
||||||
|
|
||||||
|
always @(posedge tclk or negedge t_rstn) begin
|
||||||
|
if (!t_rstn) begin
|
||||||
|
o_tx_data <= 'b0;
|
||||||
|
end else if (des_sync_src_neg) begin
|
||||||
|
o_tx_data <= i_data_in;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
//=============================
|
||||||
|
//--o_req
|
||||||
|
//=============================
|
||||||
|
always @(posedge tclk or negedge t_rstn) begin
|
||||||
|
if (!t_rstn) begin
|
||||||
|
o_req <= 1'b0;
|
||||||
|
end else if (des_sync_src_ack_2) begin
|
||||||
|
o_req <= 1'b0;
|
||||||
|
end else begin
|
||||||
|
o_req <= 1'b1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
//==============================rx module===========
|
||||||
|
module rx(
|
||||||
|
input rclk,
|
||||||
|
input r_rstn,
|
||||||
|
input i_req,
|
||||||
|
input [4:0] i_data_in,
|
||||||
|
output reg o_ack,
|
||||||
|
output reg [4:0] o_rx_data
|
||||||
|
);
|
||||||
|
//==========================< 信号 >=========================
|
||||||
|
reg src_sync_des_req_1;
|
||||||
|
reg src_sync_des_req_2;
|
||||||
|
|
||||||
|
always @(posedge rclk or r_rstn) begin
|
||||||
|
if (!r_rstn) begin
|
||||||
|
src_sync_des_req_1 <= 1'b0;
|
||||||
|
src_sync_des_req_2 <= 1'b0;
|
||||||
|
end else begin
|
||||||
|
src_sync_des_req_1 <= i_req;
|
||||||
|
src_sync_des_req_2 <= src_sync_des_req_1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
always @(posedge rclk or negedge r_rstn) begin
|
||||||
|
if (!r_rstn) begin
|
||||||
|
o_ack <= 1'b0;
|
||||||
|
end else begin
|
||||||
|
o_ack <= src_sync_des_req_2;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
always @(posedge rclk or negedge r_rstn) begin
|
||||||
|
if (!r_rstn) begin
|
||||||
|
o_rx_data <= 'b0;
|
||||||
|
end else if (src_sync_des_req_2) begin
|
||||||
|
o_rx_data <= i_data_in;
|
||||||
|
end else begin
|
||||||
|
o_rx_data <= o_rx_data;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
|
@ -0,0 +1,25 @@
|
||||||
|
module gray_trans#(
|
||||||
|
parameter SIZE=8
|
||||||
|
)(
|
||||||
|
input [SIZE-1] bin,
|
||||||
|
output[SIZE-1] gray,
|
||||||
|
);
|
||||||
|
assign gray=bin^{1'b0,bin[SIZE-1:1]};
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module gray_trans#(
|
||||||
|
parameter SIZE=8
|
||||||
|
)(
|
||||||
|
input [SIZE-1:0] gray,
|
||||||
|
output[SIZE-1]:0 bin
|
||||||
|
);
|
||||||
|
assign bin[SIZE-1]=gray[SIZE-1];
|
||||||
|
|
||||||
|
genvar i;
|
||||||
|
generate
|
||||||
|
for (i=SIZE-2;i>0;i=i-1)
|
||||||
|
begin:trans
|
||||||
|
assign bin[i]=gray[i]^bin[i+1];
|
||||||
|
end
|
||||||
|
endgenerate
|
||||||
|
endmodule
|
|
@ -0,0 +1,77 @@
|
||||||
|
//==========================================================
|
||||||
|
//--Author : colonel
|
||||||
|
//--Date : 11-14
|
||||||
|
//--Module : rr_arbiter
|
||||||
|
//--Function: uart is diviede into uart_send,uart_reciver
|
||||||
|
//--Reference:https://blog.csdn.net/yueqiu693/article/details/125073144
|
||||||
|
//==========================================================
|
||||||
|
module rr_arbiter
|
||||||
|
(
|
||||||
|
input clk,
|
||||||
|
input rst_n,
|
||||||
|
input [3:0]req,
|
||||||
|
input req_en,
|
||||||
|
output[3:0]grant_arb
|
||||||
|
);
|
||||||
|
reg [3:0] state_c_arb;
|
||||||
|
reg [3:0] state_n_arb;
|
||||||
|
always @(posedge clk or negedge rst_n) begin
|
||||||
|
if (!rst_n) begin
|
||||||
|
state_c_arb<=0;
|
||||||
|
end
|
||||||
|
else if(req_en)begin
|
||||||
|
state_c_arb=state_n_arb;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
state_c_arb<=0;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
always @(*) begin
|
||||||
|
if (!rst_n) begin
|
||||||
|
state_n_arb<=0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
case(state_c_arb)
|
||||||
|
4'b0001:begin
|
||||||
|
case(1'b1)
|
||||||
|
req[1]:state_n_arb<=4'b0010;
|
||||||
|
req[2]:state_n_arb<=4'b0100;
|
||||||
|
req[3]:state_n_arb<=4'b1000;
|
||||||
|
req[0]:state_n_arb<=4'b0001;
|
||||||
|
default:state_n_arb<=4'b0001;
|
||||||
|
endcase
|
||||||
|
end
|
||||||
|
4'b0010:begin
|
||||||
|
case(1'b1)
|
||||||
|
req[2]:state_n_arb<=4'b0100;
|
||||||
|
req[3]:state_n_arb<=4'b1000;
|
||||||
|
req[0]:state_n_arb<=4'b0001;
|
||||||
|
req[1]:state_n_arb<=4'b0010;
|
||||||
|
default:state_n_arb<=4'b0010;
|
||||||
|
endcase
|
||||||
|
end
|
||||||
|
4'b0100:begin
|
||||||
|
case(1'b1)
|
||||||
|
req[3]:state_n_arb<=4'b1000;
|
||||||
|
req[0]:state_n_arb<=4'b0001;
|
||||||
|
req[1]:state_n_arb<=4'b0010;
|
||||||
|
req[2]:state_n_arb<=4'b0100;
|
||||||
|
default:state_n_arb<=4'b0100;
|
||||||
|
endcase
|
||||||
|
end
|
||||||
|
4'b1000:begin
|
||||||
|
case(1'b1)
|
||||||
|
req[0]:state_n_arb<=4'b0001;
|
||||||
|
req[1]:state_n_arb<=4'b0010;
|
||||||
|
req[2]:state_n_arb<=4'b0100;
|
||||||
|
req[3]:state_n_arb<=4'b1000;
|
||||||
|
default:state_n_arb<=4'b1000;
|
||||||
|
endcase
|
||||||
|
end
|
||||||
|
default:state_n_arb<=4'b0001;
|
||||||
|
endcase
|
||||||
|
end
|
||||||
|
end
|
||||||
|
assign grant_arb=state_n_arb;
|
||||||
|
endmodule
|
Loading…
Reference in New Issue