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