feat(top): add mac layer control, half tested
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
set_property MAX_FANOUT 512 [get_nets *u_Receiver/mag*]
|
set_property MAX_FANOUT 512 [get_nets *u_RecvTop/mag*]
|
||||||
# set_property MAX_FANOUT 512 [get_nets u_Receiver/mag_valid]
|
# set_property MAX_FANOUT 512 [get_nets u_Receiver/mag_valid]
|
||||||
set_false_path -through [get_nets u_Receiver/rst]
|
# set_false_path -through [get_nets u_Receiver/rst]
|
||||||
|
set_false_path -through [get_nets u_RecvTop/SR[0]]
|
||||||
+106
-114
@@ -20,130 +20,122 @@
|
|||||||
//////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
module CCSDS_LDPC_DEC_K1024_R12_TOPP
|
module CCSDS_LDPC_DEC_K1024_R12_TOPP #(
|
||||||
#(
|
parameter MAX_ITER_NUM = 6'd14, //最大迭代次数常量
|
||||||
parameter MAX_ITER_NUM = 6'd14, //最大迭代次数常量
|
parameter WIDTH = 4'd8, //量化比特
|
||||||
parameter WIDTH = 4'd8, //量化比特
|
parameter OUT_ONLY_INFORMATION = 1'b1 //译码输出格式选择标志,1:只输出信息位;0:输出整个码字
|
||||||
parameter OUT_ONLY_INFORMATION = 1'b0 //译码输出格式选择标志,1:只输出信息位;0:输出整个码字
|
) (
|
||||||
)
|
input clk, //工作时钟,100MHz
|
||||||
(
|
input Rst, //同步复位信号,高有效
|
||||||
input clk, //工作时钟,100MHz
|
input FrameSync, //帧同步标志,高脉冲
|
||||||
input Rst, //同步复位信号,高有效
|
input Nd, //译码输入数据有效标志,高有效
|
||||||
input FrameSync, //帧同步标志,高脉冲
|
input [WIDTH-1:0] Din, //译码输入数据,软信息
|
||||||
input Nd, //译码输入数据有效标志,高有效
|
|
||||||
input [WIDTH-1:0] Din, //译码输入数据,软信息
|
|
||||||
|
|
||||||
|
|
||||||
output LDPC_SyncOut, //LDPC 模块帧同步输出信号,高脉冲,指示帧起点
|
|
||||||
output Rdy, //译码输出信号有效标志,高有效
|
|
||||||
output [0:0] LDPC_Dout, //译码输出信号,MSB输出
|
|
||||||
|
|
||||||
output [8:0] good_frames, //译码好帧计数
|
|
||||||
output [8:0] bad_frames, //译码坏帧计数
|
|
||||||
output [8:0] total_frames //译码总帧数计数
|
|
||||||
);
|
|
||||||
|
|
||||||
wire FrameSync_A_TM;
|
|
||||||
wire Nd_A_TM;
|
|
||||||
wire [WIDTH-1:0] Din_A_TM;
|
|
||||||
|
|
||||||
wire FrameSync_B_TM;
|
|
||||||
wire Nd_B_TM;
|
|
||||||
wire [WIDTH-1:0] Din_B_TM;
|
|
||||||
|
|
||||||
wire LDPC_SyncOut_A;
|
|
||||||
wire Rdy_A;
|
|
||||||
wire [0:0] LDPC_Dout_A;
|
|
||||||
wire [8:0] good_frames_A;
|
|
||||||
wire [8:0] bad_frames_A;
|
|
||||||
wire [8:0] total_frames_A;
|
|
||||||
|
|
||||||
wire LDPC_SyncOut_B;
|
|
||||||
wire Rdy_B;
|
|
||||||
wire [0:0] LDPC_Dout_B;
|
|
||||||
wire [8:0] good_frames_B;
|
|
||||||
wire [8:0] bad_frames_B;
|
|
||||||
wire [8:0] total_frames_B;
|
|
||||||
|
|
||||||
|
|
||||||
LDPC_TopManage_2
|
output LDPC_SyncOut, //LDPC 模块帧同步输出信号,高脉冲,指示帧起点
|
||||||
#(
|
output Rdy, //译码输出信号有效标志,高有效
|
||||||
|
output [0:0] LDPC_Dout, //译码输出信号,MSB输出
|
||||||
|
|
||||||
|
output [8:0] good_frames, //译码好帧计数
|
||||||
|
output [8:0] bad_frames, //译码坏帧计数
|
||||||
|
output [8:0] total_frames //译码总帧数计数
|
||||||
|
);
|
||||||
|
|
||||||
|
wire FrameSync_A_TM;
|
||||||
|
wire Nd_A_TM;
|
||||||
|
wire [WIDTH-1:0] Din_A_TM;
|
||||||
|
|
||||||
|
wire FrameSync_B_TM;
|
||||||
|
wire Nd_B_TM;
|
||||||
|
wire [WIDTH-1:0] Din_B_TM;
|
||||||
|
|
||||||
|
wire LDPC_SyncOut_A;
|
||||||
|
wire Rdy_A;
|
||||||
|
wire [ 0:0] LDPC_Dout_A;
|
||||||
|
wire [ 8:0] good_frames_A;
|
||||||
|
wire [ 8:0] bad_frames_A;
|
||||||
|
wire [ 8:0] total_frames_A;
|
||||||
|
|
||||||
|
wire LDPC_SyncOut_B;
|
||||||
|
wire Rdy_B;
|
||||||
|
wire [ 0:0] LDPC_Dout_B;
|
||||||
|
wire [ 8:0] good_frames_B;
|
||||||
|
wire [ 8:0] bad_frames_B;
|
||||||
|
wire [ 8:0] total_frames_B;
|
||||||
|
|
||||||
|
|
||||||
|
LDPC_TopManage_2 #(
|
||||||
.WIDTH(WIDTH)
|
.WIDTH(WIDTH)
|
||||||
)
|
) TM (
|
||||||
TM (
|
.clk (clk),
|
||||||
.clk(clk),
|
.Rst (Rst),
|
||||||
.Rst(Rst),
|
.FrameSync_TM (FrameSync),
|
||||||
.FrameSync_TM(FrameSync),
|
.Nd_TM (Nd),
|
||||||
.Nd_TM(Nd),
|
.Din_TM (Din),
|
||||||
.Din_TM(Din),
|
.FrameSync_A_TM (FrameSync_A_TM),
|
||||||
.FrameSync_A_TM(FrameSync_A_TM),
|
.Nd_A_TM (Nd_A_TM),
|
||||||
.Nd_A_TM(Nd_A_TM),
|
.Din_A_TM (Din_A_TM),
|
||||||
.Din_A_TM(Din_A_TM),
|
.FrameSync_B_TM (FrameSync_B_TM),
|
||||||
.FrameSync_B_TM(FrameSync_B_TM),
|
.Nd_B_TM (Nd_B_TM),
|
||||||
.Nd_B_TM(Nd_B_TM),
|
.Din_B_TM (Din_B_TM),
|
||||||
.Din_B_TM(Din_B_TM),
|
.LDPC_SyncOut_A_TM(LDPC_SyncOut_A),
|
||||||
.LDPC_SyncOut_A_TM(LDPC_SyncOut_A),
|
.Rdy_A_TM (Rdy_A),
|
||||||
.Rdy_A_TM(Rdy_A),
|
.LDPC_Dout_A_TM (LDPC_Dout_A),
|
||||||
.LDPC_Dout_A_TM(LDPC_Dout_A),
|
.good_frames_A_TM (good_frames_A),
|
||||||
.good_frames_A_TM(good_frames_A),
|
.bad_frames_A_TM (bad_frames_A),
|
||||||
.bad_frames_A_TM(bad_frames_A),
|
.total_frames_A_TM(total_frames_A),
|
||||||
.total_frames_A_TM(total_frames_A),
|
.LDPC_SyncOut_B_TM(LDPC_SyncOut_B),
|
||||||
.LDPC_SyncOut_B_TM(LDPC_SyncOut_B),
|
.Rdy_B_TM (Rdy_B),
|
||||||
.Rdy_B_TM(Rdy_B),
|
.LDPC_Dout_B_TM (LDPC_Dout_B),
|
||||||
.LDPC_Dout_B_TM(LDPC_Dout_B),
|
.good_frames_B_TM (good_frames_B),
|
||||||
.good_frames_B_TM(good_frames_B),
|
.bad_frames_B_TM (bad_frames_B),
|
||||||
.bad_frames_B_TM(bad_frames_B),
|
.total_frames_B_TM(total_frames_B),
|
||||||
.total_frames_B_TM(total_frames_B),
|
.LDPC_SyncOut_TM (LDPC_SyncOut),
|
||||||
.LDPC_SyncOut_TM(LDPC_SyncOut),
|
.Rdy_TM (Rdy),
|
||||||
.Rdy_TM(Rdy),
|
.LDPC_Dout_TM (LDPC_Dout),
|
||||||
.LDPC_Dout_TM(LDPC_Dout),
|
.good_frames_TM (good_frames),
|
||||||
.good_frames_TM(good_frames),
|
.bad_frames_TM (bad_frames),
|
||||||
.bad_frames_TM(bad_frames),
|
.total_frames_TM (total_frames)
|
||||||
.total_frames_TM(total_frames)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
CCSDS_LDPC_DEC_K1024_R12
|
CCSDS_LDPC_DEC_K1024_R12 #(
|
||||||
#(
|
.MAX_ITER_NUM(MAX_ITER_NUM),
|
||||||
.MAX_ITER_NUM(MAX_ITER_NUM),
|
|
||||||
.WIDTH(WIDTH),
|
.WIDTH(WIDTH),
|
||||||
.OUT_ONLY_INFORMATION(OUT_ONLY_INFORMATION)
|
.OUT_ONLY_INFORMATION(OUT_ONLY_INFORMATION)
|
||||||
)
|
) inst_DEC_A (
|
||||||
inst_DEC_A (
|
.clk (clk),
|
||||||
.clk(clk),
|
.Rst (Rst),
|
||||||
.Rst(Rst),
|
.FrameSync (FrameSync_A_TM),
|
||||||
.FrameSync(FrameSync_A_TM),
|
.Nd (Nd_A_TM),
|
||||||
.Nd(Nd_A_TM),
|
.Din (Din_A_TM),
|
||||||
.Din(Din_A_TM),
|
.LDPC_SyncOut(LDPC_SyncOut_A),
|
||||||
.LDPC_SyncOut(LDPC_SyncOut_A),
|
.Rdy (Rdy_A),
|
||||||
.Rdy(Rdy_A),
|
.LDPC_Dout (LDPC_Dout_A),
|
||||||
.LDPC_Dout(LDPC_Dout_A),
|
.good_frames (good_frames_A),
|
||||||
.good_frames(good_frames_A),
|
.bad_frames (bad_frames_A),
|
||||||
.bad_frames(bad_frames_A),
|
.total_frames(total_frames_A)
|
||||||
.total_frames(total_frames_A)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
CCSDS_LDPC_DEC_K1024_R12
|
CCSDS_LDPC_DEC_K1024_R12 #(
|
||||||
#(
|
.MAX_ITER_NUM(MAX_ITER_NUM),
|
||||||
.MAX_ITER_NUM(MAX_ITER_NUM),
|
|
||||||
.WIDTH(WIDTH),
|
.WIDTH(WIDTH),
|
||||||
.OUT_ONLY_INFORMATION(OUT_ONLY_INFORMATION)
|
.OUT_ONLY_INFORMATION(OUT_ONLY_INFORMATION)
|
||||||
)
|
) inst_DEC_B (
|
||||||
inst_DEC_B (
|
.clk (clk),
|
||||||
.clk(clk),
|
.Rst (Rst),
|
||||||
.Rst(Rst),
|
.FrameSync (FrameSync_B_TM),
|
||||||
.FrameSync(FrameSync_B_TM),
|
.Nd (Nd_B_TM),
|
||||||
.Nd(Nd_B_TM),
|
.Din (Din_B_TM),
|
||||||
.Din(Din_B_TM),
|
.LDPC_SyncOut(LDPC_SyncOut_B),
|
||||||
.LDPC_SyncOut(LDPC_SyncOut_B),
|
.Rdy (Rdy_B),
|
||||||
.Rdy(Rdy_B),
|
.LDPC_Dout (LDPC_Dout_B),
|
||||||
.LDPC_Dout(LDPC_Dout_B),
|
.good_frames (good_frames_B),
|
||||||
.good_frames(good_frames_B),
|
.bad_frames (bad_frames_B),
|
||||||
.bad_frames(bad_frames_B),
|
.total_frames(total_frames_B)
|
||||||
.total_frames(total_frames_B)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
|||||||
+43
-21
@@ -19,27 +19,28 @@
|
|||||||
//
|
//
|
||||||
//////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////
|
||||||
module RecvTop (
|
module RecvTop (
|
||||||
input clk,
|
input clk,
|
||||||
input clk_2x, // clk_2x
|
input clk_2x, // clk_2x
|
||||||
input clk_4x,
|
input clk_4x,
|
||||||
input rst,
|
input rst,
|
||||||
input rst2, // TODO: delete the signal
|
input rst2, // TODO: delete the signal
|
||||||
// phy wave
|
// phy wave
|
||||||
input [11:0] dini,
|
input [11:0] dini,
|
||||||
input [11:0] dinq,
|
input [11:0] dinq,
|
||||||
// mgc control
|
// mgc control
|
||||||
output [ 3:0] ad9361_ctrl_in,
|
output [ 3:0] ad9361_ctrl_in,
|
||||||
|
output wire frame_sync_pulse, // in domain clk
|
||||||
//vio
|
//vio
|
||||||
input vio_tsync_inter16, //为1的时候启用内插,从16倍过采样中挑一路
|
input vio_tsync_inter16, //为1的时候启用内插,从16倍过采样中挑一路
|
||||||
input EQUenable_vio, //为1时启用均衡
|
input EQUenable_vio, //为1时启用均衡
|
||||||
input [ 7:0] Zerozone_vio, //零域估计,默认值为8'd29
|
input [ 7:0] Zerozone_vio, //零域估计,默认值为8'd29
|
||||||
input [ 6:0] vio_stopbit, //寻找停止位,默认值为7'd60
|
input [ 6:0] vio_stopbit, //寻找停止位,默认值为7'd60
|
||||||
// stop signal
|
// stop signal
|
||||||
output flag_stop, //给shx,拉高8个clk表示当前时帧有效数据接收完毕
|
output flag_stop, //给shx,拉高8个clk表示当前时帧有效数据接收完毕
|
||||||
output [16:0] addr_stop, //给shx,拉高8个clk,与flag_stop对齐,指示位置与最后1bit有效数据的位置对齐
|
output [16:0] addr_stop, //给shx,拉高8个clk,与flag_stop对齐,指示位置与最后1bit有效数据的位置对齐
|
||||||
// mac frame header
|
// mac frame header
|
||||||
output [63:0] recvNetData,
|
output [63:0] recvNetData,
|
||||||
output recvNetDataNd
|
output recvNetDataNd
|
||||||
);
|
);
|
||||||
|
|
||||||
wire rst_TimeSync;
|
wire rst_TimeSync;
|
||||||
@@ -255,12 +256,12 @@ module RecvTop (
|
|||||||
.m_axis_data_tdata (dmf_tdata_interp4_q)
|
.m_axis_data_tdata (dmf_tdata_interp4_q)
|
||||||
);
|
);
|
||||||
|
|
||||||
localparam CNT_CHU_SEQ_SYNC_MAX = 40;//! should not less than 3 due to the minimum rst of aresetn
|
localparam CNT_CHU_SEQ_SYNC_MAX = 40; //! should not less than 3 due to the minimum rst of aresetn
|
||||||
|
|
||||||
wire [21:0] mag;
|
wire [21:0] mag;
|
||||||
wire mag_valid;
|
wire mag_valid;
|
||||||
wire frame_sync_4x;
|
wire frame_sync_4x;
|
||||||
wire frame_sync_pulse; // in domain clk
|
// wire frame_sync_pulse;
|
||||||
reg flag_frame_sync; // active high level
|
reg flag_frame_sync; // active high level
|
||||||
wire rst_frame_sync; // derive from frame sync pulse
|
wire rst_frame_sync; // derive from frame sync pulse
|
||||||
reg [ 7:0] cnt_chu_seq_sync; // frame sync delay to chu seq sample start pos
|
reg [ 7:0] cnt_chu_seq_sync; // frame sync delay to chu seq sample start pos
|
||||||
@@ -411,9 +412,9 @@ module RecvTop (
|
|||||||
.clk (clk),
|
.clk (clk),
|
||||||
.rst (rst_frame_sync),
|
.rst (rst_frame_sync),
|
||||||
// param
|
// param
|
||||||
.EQUenable_vio (EQUenable_vio), //为1时启用均衡
|
.EQUenable_vio (EQUenable_vio), //为1时启用均衡
|
||||||
.Zerozone_vio (Zerozone_vio), //零域估计,默认值为8'd29
|
.Zerozone_vio (Zerozone_vio), //零域估计,默认值为8'd29
|
||||||
.flag_ow_left (framesync_tsync), //在一帧内,与第一个数据段的pilot的ow第一个nd对齐
|
.flag_ow_left (framesync_tsync), //在一帧内,与第一个数据段的pilot的ow第一个nd对齐
|
||||||
.nd (IntpARdy),
|
.nd (IntpARdy),
|
||||||
.dini (IntpOuti),
|
.dini (IntpOuti),
|
||||||
.dinq (IntpOutq),
|
.dinq (IntpOutq),
|
||||||
@@ -533,6 +534,27 @@ module RecvTop (
|
|||||||
.src_rst () // 1-bit input: optional; required when RST_USED = 1
|
.src_rst () // 1-bit input: optional; required when RST_USED = 1
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// ***** debug *****
|
||||||
|
|
||||||
|
ila_recv_top u_ila_recv_top (
|
||||||
|
.clk (clk),
|
||||||
|
.probe0 (flag_mgc_done), // width: 1
|
||||||
|
.probe1 (flag_frame_sync), // width: 1
|
||||||
|
.probe2 (mf_data_interp4_q), // width: 32
|
||||||
|
.probe3 (mf_data_interp4_i), // width: 32
|
||||||
|
.probe4 (freqestm.freq_out), // width: 14
|
||||||
|
.probe5 (freqdataout_i), // width: 10
|
||||||
|
.probe6 (freqdataout_q), // width: 10
|
||||||
|
.probe7 (nd_SC_FDE_dout), // width: 1
|
||||||
|
.probe8 (SC_FDE_douti), // width: 10
|
||||||
|
.probe9 (SC_FDE_doutq), // width: 10
|
||||||
|
.probe10(LDPC_SyncOut), // width: 1
|
||||||
|
.probe11(LDPC_Rdy), // width: 1
|
||||||
|
.probe12(LDPC_Dout), // width: 1
|
||||||
|
.probe13(bad_frames), // width: 9
|
||||||
|
.probe14(total_frames), // width: 9
|
||||||
|
.probe15(mgc_start) // width: 1
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|||||||
+419
@@ -0,0 +1,419 @@
|
|||||||
|
`timescale 1ns / 1ps
|
||||||
|
|
||||||
|
module net_city (
|
||||||
|
// basic
|
||||||
|
input clk,
|
||||||
|
input rst_initial,
|
||||||
|
input rst_manual, //manual
|
||||||
|
// tx signal
|
||||||
|
output reg tx_start = 1'b0, // pulse
|
||||||
|
output reg [63:0] trans_net_data = 64'd0,
|
||||||
|
output reg flag_video_send = 1'b0,
|
||||||
|
output reg [07:0] recv_id = 8'd0,
|
||||||
|
// rx signal
|
||||||
|
input frame_sync,
|
||||||
|
input recv_net_data_nd,
|
||||||
|
input [63:0] recv_net_data,
|
||||||
|
// net parameter
|
||||||
|
input [31:0] frame_sync_time,
|
||||||
|
input [07:0] id_num,
|
||||||
|
input [07:0] max_slot_num,
|
||||||
|
input [07:0] video_id01,
|
||||||
|
input [07:0] video_id02,
|
||||||
|
input [07:0] video_id03,
|
||||||
|
// net state
|
||||||
|
output reg is_net = 1'b0,
|
||||||
|
output reg flag_to_uc = 1'b0,
|
||||||
|
// intr 2 ps
|
||||||
|
output wire intr_ps,
|
||||||
|
output reg rx_rst,
|
||||||
|
input wire tx_done
|
||||||
|
);
|
||||||
|
//----------parameter----------
|
||||||
|
localparam SLOT_TIME = 750000; // 15ms
|
||||||
|
|
||||||
|
//----------rst----------
|
||||||
|
wire rst;
|
||||||
|
assign rst = rst_initial || rst_manual;
|
||||||
|
|
||||||
|
//----------counter_1s----------
|
||||||
|
reg [31:0] cnt_1s = 32'd0;
|
||||||
|
always @(posedge clk) begin
|
||||||
|
if (rst) begin
|
||||||
|
cnt_1s <= 32'd0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
if (cnt_1s == 32'd49999999) begin
|
||||||
|
cnt_1s <= 32'd0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
cnt_1s <= cnt_1s + 32'd1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
//----------flag_tx----------
|
||||||
|
|
||||||
|
|
||||||
|
//----------state_net----------
|
||||||
|
reg [07:0] state_net = 8'd0;
|
||||||
|
reg [31:0] cnt_trans_slot = 32'd0;
|
||||||
|
reg [31:0] cnt_inter_slot = 32'd0;
|
||||||
|
reg [07:0] cur_slot = 8'd0;
|
||||||
|
reg [07:0] cnt_video_slot = 8'd0;
|
||||||
|
reg [31:0] cnt_other = 32'd0;
|
||||||
|
|
||||||
|
reg [07:0] connect_node = 8'd0;
|
||||||
|
reg [63:0] trans_net_data_reg = 64'd0;
|
||||||
|
reg [07:0] recv_connect_node = 8'd0;
|
||||||
|
reg [07:0] recv_video_id01 = 8'd0;
|
||||||
|
reg [07:0] recv_video_id02 = 8'd0;
|
||||||
|
reg [07:0] recv_video_id03 = 8'd0;
|
||||||
|
|
||||||
|
// if u dont understand this code blew, plz contact NanzZ 😊
|
||||||
|
assign intr_ps = (cnt_trans_slot == SLOT_TIME - 50000) && ((id_num == 1 && (cur_slot == max_slot_num - 1)) || (id_num != 1 && (cur_slot == id_num - 8'd2)));
|
||||||
|
|
||||||
|
always @(posedge clk) begin
|
||||||
|
if (rst) begin
|
||||||
|
rx_rst <= 1;
|
||||||
|
end
|
||||||
|
else if (tx_start) begin
|
||||||
|
rx_rst <= 1;
|
||||||
|
end
|
||||||
|
else if (tx_done) begin
|
||||||
|
rx_rst <= 0;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
always @(posedge clk) begin
|
||||||
|
if (rst) begin
|
||||||
|
state_net <= 8'd0;
|
||||||
|
cnt_trans_slot <= 32'd0;
|
||||||
|
cnt_inter_slot <= 32'd0;
|
||||||
|
cnt_other <= 32'd0;
|
||||||
|
recv_id <= 8'd0;
|
||||||
|
recv_connect_node <= 8'd0;
|
||||||
|
recv_video_id01 <= 8'd0;
|
||||||
|
recv_video_id02 <= 8'd0;
|
||||||
|
recv_video_id03 <= 8'd0;
|
||||||
|
tx_start <= 1'b0;
|
||||||
|
trans_net_data <= 64'd0;
|
||||||
|
is_net <= 1'b0;
|
||||||
|
flag_video_send <= 1'b0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
case (state_net)
|
||||||
|
8'd0: begin
|
||||||
|
state_net <= 8'd1;
|
||||||
|
cnt_trans_slot <= 32'd0;
|
||||||
|
cnt_inter_slot <= 32'd0;
|
||||||
|
cnt_other <= 32'd0;
|
||||||
|
recv_id <= recv_id;
|
||||||
|
recv_connect_node <= 8'd0;
|
||||||
|
recv_video_id01 <= recv_video_id01;
|
||||||
|
recv_video_id02 <= recv_video_id02;
|
||||||
|
recv_video_id03 <= recv_video_id03;
|
||||||
|
tx_start <= 1'b0;
|
||||||
|
trans_net_data <= 64'd0;
|
||||||
|
is_net <= 1'b0;
|
||||||
|
flag_video_send <= 1'b0;
|
||||||
|
end
|
||||||
|
8'd1: begin
|
||||||
|
state_net <= 8'd2;
|
||||||
|
end
|
||||||
|
8'd2: begin
|
||||||
|
if (frame_sync) begin
|
||||||
|
state_net <= 8'd50;
|
||||||
|
cnt_other <= 32'd0;
|
||||||
|
cnt_trans_slot <= frame_sync_time;
|
||||||
|
cnt_inter_slot <= cnt_trans_slot + 32'd1;
|
||||||
|
end
|
||||||
|
else if (cnt_other == 32'd49999999) begin
|
||||||
|
cnt_other <= 32'd0;
|
||||||
|
state_net <= 8'd100;
|
||||||
|
is_net <= 1'b1;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
cnt_other <= cnt_other + 32'd1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
8'd100: begin // _tx
|
||||||
|
state_net <= 8'd101;
|
||||||
|
tx_start <= 1'b1;
|
||||||
|
trans_net_data <= trans_net_data_reg;
|
||||||
|
cnt_trans_slot <= 32'd0;
|
||||||
|
cnt_inter_slot <= 32'd0;
|
||||||
|
end
|
||||||
|
8'd101: begin
|
||||||
|
state_net <= 8'd200;
|
||||||
|
tx_start <= 1'b0;
|
||||||
|
cnt_trans_slot <= cnt_trans_slot + 32'd1;
|
||||||
|
end
|
||||||
|
|
||||||
|
8'd200: begin // wait
|
||||||
|
if ((cnt_trans_slot == SLOT_TIME - 2) && (id_num == 1 && (cur_slot == max_slot_num - 1))) begin
|
||||||
|
state_net <= 8'd100;
|
||||||
|
cnt_trans_slot <= cnt_trans_slot + 32'd1;
|
||||||
|
cnt_inter_slot <= 32'd0;
|
||||||
|
end
|
||||||
|
else if ((cnt_trans_slot == SLOT_TIME - 2) && (id_num != 1 && (cur_slot == id_num - 8'd2))) begin
|
||||||
|
state_net <= 8'd100;
|
||||||
|
cnt_trans_slot <= cnt_trans_slot + 32'd1;
|
||||||
|
cnt_inter_slot <= 32'd0;
|
||||||
|
end
|
||||||
|
else if (frame_sync) begin
|
||||||
|
state_net <= 8'd50;
|
||||||
|
cnt_trans_slot <= frame_sync_time;
|
||||||
|
cnt_inter_slot <= cnt_trans_slot + 32'd1;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
if (cnt_trans_slot == SLOT_TIME - 1) begin
|
||||||
|
cnt_trans_slot <= 32'd0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
cnt_trans_slot <= cnt_trans_slot + 32'd1;
|
||||||
|
end
|
||||||
|
cnt_inter_slot <= 32'd0;
|
||||||
|
end
|
||||||
|
|
||||||
|
case (id_num)
|
||||||
|
recv_video_id01: begin
|
||||||
|
if (cnt_trans_slot == SLOT_TIME - 2 && cnt_video_slot == 8'd0) begin
|
||||||
|
flag_video_send <= 1'b1;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
flag_video_send <= 1'b0;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
recv_video_id02: begin
|
||||||
|
if (cnt_trans_slot == SLOT_TIME - 2 && cnt_video_slot == 8'd1) begin
|
||||||
|
flag_video_send <= 1'b1;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
flag_video_send <= 1'b0;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
recv_video_id03: begin
|
||||||
|
if (cnt_trans_slot == SLOT_TIME - 2 && cnt_video_slot == 8'd2) begin
|
||||||
|
flag_video_send <= 1'b1;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
flag_video_send <= 1'b0;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
default: begin
|
||||||
|
flag_video_send <= 1'b0;
|
||||||
|
end
|
||||||
|
endcase
|
||||||
|
end
|
||||||
|
|
||||||
|
8'd50: begin
|
||||||
|
if (recv_net_data_nd) begin
|
||||||
|
if (recv_net_data[23:00] == 24'h7e5a33) begin
|
||||||
|
state_net <= 8'd51;
|
||||||
|
is_net <= 1'b1;
|
||||||
|
|
||||||
|
cnt_trans_slot <= cnt_trans_slot + 32'd1;
|
||||||
|
cnt_inter_slot <= cnt_inter_slot + 32'd1;
|
||||||
|
|
||||||
|
recv_id <= recv_net_data[63:56];
|
||||||
|
recv_video_id01 <= recv_net_data[55:48];
|
||||||
|
recv_video_id02 <= recv_net_data[47:40];
|
||||||
|
recv_video_id03 <= recv_net_data[39:32];
|
||||||
|
recv_connect_node <= recv_net_data[31:24];
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
state_net <= 8'd200;
|
||||||
|
is_net <= 1'b0;
|
||||||
|
|
||||||
|
cnt_trans_slot <= cnt_inter_slot + 32'd1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
cnt_trans_slot <= cnt_trans_slot + 32'd1;
|
||||||
|
cnt_inter_slot <= cnt_inter_slot + 32'd1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
8'd51: begin
|
||||||
|
state_net <= 8'd200;
|
||||||
|
cnt_trans_slot <= cnt_trans_slot + 32'd1;
|
||||||
|
end
|
||||||
|
|
||||||
|
default: begin
|
||||||
|
state_net <= 8'd0;
|
||||||
|
cnt_trans_slot <= 32'd0;
|
||||||
|
cnt_inter_slot <= 32'd0;
|
||||||
|
cnt_other <= 32'd0;
|
||||||
|
recv_id <= recv_id;
|
||||||
|
recv_connect_node <= 8'd0;
|
||||||
|
recv_video_id01 <= recv_video_id01;
|
||||||
|
recv_video_id02 <= recv_video_id02;
|
||||||
|
recv_video_id03 <= recv_video_id03;
|
||||||
|
tx_start <= 1'b0;
|
||||||
|
trans_net_data <= 64'd0;
|
||||||
|
is_net <= 1'b0;
|
||||||
|
flag_video_send <= 1'b0;
|
||||||
|
end
|
||||||
|
endcase
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
//----------connect_node----------
|
||||||
|
// always @(posedge clk) begin
|
||||||
|
// if (rst) begin
|
||||||
|
// connect_node <= 8'd0;
|
||||||
|
// end else begin
|
||||||
|
// if (state_net == 8'd51) begin
|
||||||
|
// case (recv_id)
|
||||||
|
// 8'd1: begin
|
||||||
|
// connect_node[07:06] <= 2'b11;
|
||||||
|
// end
|
||||||
|
// 8'd2: begin
|
||||||
|
// connect_node[05:04] <= 2'b11;
|
||||||
|
// end
|
||||||
|
// 8'd3: begin
|
||||||
|
// connect_node[03:02] <= 2'b11;
|
||||||
|
// end
|
||||||
|
// 8'd4: begin
|
||||||
|
// connect_node[01:00] <= 2'b11;
|
||||||
|
// end
|
||||||
|
// default: begin
|
||||||
|
// connect_node <= 8'd0;
|
||||||
|
// end
|
||||||
|
// endcase
|
||||||
|
// end else if (cnt_trans_slot == SLOT_TIME / 2 && cur_slot == id_num) begin
|
||||||
|
// connect_node <= 8'd0;
|
||||||
|
// end else begin
|
||||||
|
// connect_node <= connect_node;
|
||||||
|
// end
|
||||||
|
// end
|
||||||
|
// end
|
||||||
|
|
||||||
|
//----------trans_net_data_reg----------
|
||||||
|
reg [07:0] trans_video_id01;
|
||||||
|
reg [07:0] trans_video_id02;
|
||||||
|
reg [07:0] trans_video_id03;
|
||||||
|
always @(posedge clk) begin
|
||||||
|
if (rst) begin
|
||||||
|
trans_video_id01 <= 8'd0;
|
||||||
|
trans_video_id02 <= 8'd0;
|
||||||
|
trans_video_id03 <= 8'd0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
if (id_num == 8'd1) begin //主节点
|
||||||
|
trans_video_id01 <= video_id01;
|
||||||
|
trans_video_id02 <= video_id02;
|
||||||
|
trans_video_id03 <= video_id03;
|
||||||
|
end
|
||||||
|
else if (recv_id == 8'd1) begin //从节点只听从主节点命令
|
||||||
|
trans_video_id01 <= recv_video_id01;
|
||||||
|
trans_video_id02 <= recv_video_id02;
|
||||||
|
trans_video_id03 <= recv_video_id03;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
trans_video_id01 <= trans_video_id01;
|
||||||
|
trans_video_id02 <= trans_video_id02;
|
||||||
|
trans_video_id03 <= trans_video_id03;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
always @(posedge clk) begin
|
||||||
|
if (rst) begin
|
||||||
|
trans_net_data_reg <= 64'd0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
if (cnt_trans_slot == SLOT_TIME / 2 && cur_slot == id_num - 8'd1) begin
|
||||||
|
trans_net_data_reg[63:56] <= id_num;
|
||||||
|
trans_net_data_reg[55:48] <= trans_video_id01;
|
||||||
|
trans_net_data_reg[47:40] <= trans_video_id02;
|
||||||
|
trans_net_data_reg[39:32] <= trans_video_id03;
|
||||||
|
trans_net_data_reg[31:24] <= connect_node;
|
||||||
|
trans_net_data_reg[23:00] <= 24'h7e5a33;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
trans_net_data_reg <= trans_net_data_reg;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
//----------cur_slot----------
|
||||||
|
always @(posedge clk) begin
|
||||||
|
if (rst) begin
|
||||||
|
cur_slot <= 8'd0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
if (state_net == 8'd51) begin
|
||||||
|
if (recv_id <= max_slot_num) begin
|
||||||
|
cur_slot <= recv_id - 8'd1;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
cur_slot <= cur_slot;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else if (cnt_trans_slot == SLOT_TIME - 1) begin
|
||||||
|
if (cur_slot == max_slot_num - 8'd1) begin
|
||||||
|
cur_slot <= 8'd0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
cur_slot <= cur_slot + 8'd1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
cur_slot <= cur_slot;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
//----------cnt_video_slot----------
|
||||||
|
always @(posedge clk) begin
|
||||||
|
if (rst) begin
|
||||||
|
cnt_video_slot <= 8'd0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
if (cnt_trans_slot == SLOT_TIME - 1) begin
|
||||||
|
if (cnt_video_slot == 8'd2) begin
|
||||||
|
cnt_video_slot <= 8'd0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
cnt_video_slot <= cnt_video_slot + 8'd1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
cnt_video_slot <= cnt_video_slot;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
always @(posedge clk) begin
|
||||||
|
if (rst) begin
|
||||||
|
flag_to_uc <= 1'b0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
if (cnt_trans_slot == SLOT_TIME / 2 - 1) begin
|
||||||
|
flag_to_uc <= 1'b1;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
flag_to_uc <= 1'b0;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
ila_MAC ila_MAC (
|
||||||
|
.clk (clk),
|
||||||
|
.probe0 (tx_start),
|
||||||
|
.probe1 (connect_node),
|
||||||
|
.probe2 (cnt_trans_slot),
|
||||||
|
.probe3 (recv_net_data),
|
||||||
|
.probe4 (state_net),
|
||||||
|
.probe5 (recv_id),
|
||||||
|
.probe6 (cur_slot),
|
||||||
|
.probe7 (id_num),
|
||||||
|
.probe8 (frame_sync),
|
||||||
|
.probe9 (max_slot_num),
|
||||||
|
.probe10(recv_net_data_nd),
|
||||||
|
.probe11(trans_net_data)
|
||||||
|
);
|
||||||
|
endmodule
|
||||||
+129
-93
@@ -108,7 +108,21 @@ module system_top (
|
|||||||
|
|
||||||
// tx signal
|
// tx signal
|
||||||
wire frame_sync_pulse;
|
wire frame_sync_pulse;
|
||||||
|
wire rx_rst;
|
||||||
|
wire tx_done;
|
||||||
|
wire intr_2ps_vio;
|
||||||
|
reg intr_2ps_vio_d1;
|
||||||
|
wire intr_2ps_vio_pos;
|
||||||
|
|
||||||
|
wire tx_start_vio;
|
||||||
|
reg tx_start_vio_d1;
|
||||||
|
wire tx_start_vio_pos;
|
||||||
|
|
||||||
|
// vio
|
||||||
|
wire rst_manual;
|
||||||
|
wire [ 7:0] node_id;
|
||||||
|
wire intr_2ps;
|
||||||
|
wire [ 7:0] max_slot_num;
|
||||||
|
|
||||||
// ******** Assingment ********
|
// ******** Assingment ********
|
||||||
|
|
||||||
@@ -197,76 +211,101 @@ module system_top (
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// tdma #(
|
||||||
|
// .SLOT_LEN (750000), // 50MHz--> 15ms
|
||||||
|
// .TIC_TO_PS_LEN (700000),
|
||||||
|
// .TIC_FRAME_SYNC(42344)
|
||||||
|
// ) u_tdma (
|
||||||
|
// .clk (clk_1x),
|
||||||
|
// .rst (rst_sys),
|
||||||
|
// .flag_is_master (0),
|
||||||
|
// .flag_frame_sync(frame_sync_pulse),
|
||||||
|
// .intr_2ps (intr_2ps),
|
||||||
|
// .tx_start (tx_start),
|
||||||
|
// .rx_rst (rx_rst)
|
||||||
|
// );
|
||||||
|
|
||||||
|
net_city u_net_city (
|
||||||
|
.clk (clk_1x),
|
||||||
|
.rst_initial (rst_sys),
|
||||||
|
.rst_manual (rst_manual),
|
||||||
|
.tx_start (tx_start),
|
||||||
|
.trans_net_data (),
|
||||||
|
.flag_video_send (),
|
||||||
|
.recv_id (),
|
||||||
|
.frame_sync (frame_sync_pulse),
|
||||||
|
.recv_net_data_nd(1),
|
||||||
|
.recv_net_data (0),
|
||||||
|
.frame_sync_time (42344),
|
||||||
|
.id_num (node_id),
|
||||||
|
.max_slot_num (max_slot_num),
|
||||||
|
.video_id01 (0),
|
||||||
|
.video_id02 (0),
|
||||||
|
.video_id03 (0),
|
||||||
|
.is_net (),
|
||||||
|
.flag_to_uc (),
|
||||||
|
.intr_ps (intr_2ps),
|
||||||
|
.rx_rst (rx_rst),
|
||||||
|
.tx_done (tx_done)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
// ---- PHY layer logic start
|
// ---- PHY layer logic start
|
||||||
|
|
||||||
// enc_control u_enc_control (
|
enc_control u_enc_control (
|
||||||
// .clk (clk_poweron),
|
.clk (clk_poweron),
|
||||||
// .rst (rst_sys | phy_rst_ps),
|
.rst (rst_sys | phy_rst_ps),
|
||||||
// .s_axis_fifo_tvalid (tx_data_src_tvalid),
|
.s_axis_fifo_tvalid (tx_data_src_tvalid),
|
||||||
// .s_axis_fifo_tready (tx_data_src_tready),
|
.s_axis_fifo_tready (tx_data_src_tready),
|
||||||
// .s_axis_fifo_tdata (tx_data_src_tdata),
|
.s_axis_fifo_tdata (tx_data_src_tdata),
|
||||||
// .data_src_count (tx_data_src_count),
|
.data_src_count (tx_data_src_count),
|
||||||
// .fifo_enc_out_rd_clk (clk_1x),
|
.fifo_enc_out_rd_clk (clk_1x),
|
||||||
// .fifo_enc_out_rd_en (enc_fifo_rd_en),
|
.fifo_enc_out_rd_en (enc_fifo_rd_en),
|
||||||
// .fifo_enc_out_dout_map(enc_fifo_dout_map),
|
.fifo_enc_out_dout_map(enc_fifo_dout_map),
|
||||||
// .fifo_enc_out_empty (enc_fifo_empty)
|
.fifo_enc_out_empty (enc_fifo_empty)
|
||||||
// );
|
|
||||||
|
|
||||||
|
|
||||||
// tdma #(
|
|
||||||
// .SLOT_LEN (1250000), // 50MHz--> 25ms
|
|
||||||
// .TIC_TO_PS_LEN (1200000),
|
|
||||||
// .TIC_FRAME_SYNC(42272)
|
|
||||||
// ) u_tdma (
|
|
||||||
// .clk (clk_1x),
|
|
||||||
// .rst (rst_sys),
|
|
||||||
// .flag_is_master (1'b0),
|
|
||||||
// .flag_frame_sync(frame_sync_pulse),
|
|
||||||
// .intr_2ps (intr_2ps),
|
|
||||||
// .tx_start (tx_start)
|
|
||||||
// );
|
|
||||||
|
|
||||||
|
|
||||||
// Transmitter u_Transmitter (
|
|
||||||
// .clk (clk_1x),
|
|
||||||
// .rst (rst_sys | phy_rst | phy_rst_vio),
|
|
||||||
// .speed_mode (speed_mode),
|
|
||||||
// .send_data_ready (send_data_ready),
|
|
||||||
// .send_start (send_start),
|
|
||||||
// .send_over (send_over),
|
|
||||||
// .clk_data_src (clk_data_src),
|
|
||||||
// .tx_data_src_tdata (enc_fifo_dout_map),
|
|
||||||
// .tx_data_src_tready(enc_fifo_rd_en),
|
|
||||||
// .tx_data_src_tvalid(~enc_fifo_empty),
|
|
||||||
// .hopping_freq (),
|
|
||||||
// .ad9361_tx_data_i (ad9361_tx_data_i),
|
|
||||||
// .ad9361_tx_data_q (ad9361_tx_data_q),
|
|
||||||
// .test (tx_test_flag | phy_tx_test_flag_vio),
|
|
||||||
// .hop_wait (100)
|
|
||||||
// );
|
|
||||||
|
|
||||||
// Receiver u_Receiver (
|
|
||||||
// .clk (clk_1x),
|
|
||||||
// .clk_2x (clk_2x),
|
|
||||||
// .clk_4x (clk_4x),
|
|
||||||
// .rst (rst_sys | phy_rst | phy_rst_vio),
|
|
||||||
// .speed_mode (speed_mode),
|
|
||||||
// .ad9361_rx_data_i(ad9361_rx_data_i),
|
|
||||||
// .ad9361_rx_data_q(ad9361_rx_data_q),
|
|
||||||
// .frame_sync_pulse(frame_sync_pulse)
|
|
||||||
// );
|
|
||||||
|
|
||||||
ad9361_mgc_pin_ctrl u_ad9361_mgc_pin_ctrl (
|
|
||||||
.clk (clk_1x),
|
|
||||||
.rst (rst_sys | phy_rst),
|
|
||||||
.rx_data_i (ad9361_rx_data_i),
|
|
||||||
.rx_data_q (ad9361_rx_data_q),
|
|
||||||
.ad9361_ctrl_in(ad9361_ctrl_in)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
Transmitter u_Transmitter (
|
||||||
|
.clk (clk_1x),
|
||||||
|
.rst (rst_sys | phy_rst),
|
||||||
|
.speed_mode (2),
|
||||||
|
.send_data_ready (send_data_ready),
|
||||||
|
.send_start (tx_start),
|
||||||
|
.send_over (tx_done),
|
||||||
|
.clk_data_src (clk_data_src),
|
||||||
|
.tx_data_src_tdata (enc_fifo_dout_map),
|
||||||
|
.tx_data_src_tready(enc_fifo_rd_en),
|
||||||
|
.tx_data_src_tvalid(~enc_fifo_empty),
|
||||||
|
.hopping_freq (),
|
||||||
|
.ad9361_tx_data_i (ad9361_tx_data_i),
|
||||||
|
.ad9361_tx_data_q (ad9361_tx_data_q),
|
||||||
|
.test (tx_test_flag | phy_tx_test_flag_vio),
|
||||||
|
.hop_wait (100)
|
||||||
|
);
|
||||||
|
|
||||||
|
RecvTop u_RecvTop (
|
||||||
|
.clk (clk_1x),
|
||||||
|
.clk_2x (clk_2x),
|
||||||
|
.clk_4x (clk_4x),
|
||||||
|
.rst (rst_sys | rx_rst | phy_rst),
|
||||||
|
.rst2 (rst_sys | phy_rst),
|
||||||
|
.dini (ad9361_rx_data_i),
|
||||||
|
.dinq (ad9361_rx_data_q),
|
||||||
|
.ad9361_ctrl_in (ad9361_ctrl_in),
|
||||||
|
.frame_sync_pulse (frame_sync_pulse),
|
||||||
|
.vio_tsync_inter16(1),
|
||||||
|
.EQUenable_vio (1),
|
||||||
|
.Zerozone_vio (8'd29),
|
||||||
|
.vio_stopbit (7'd60),
|
||||||
|
.flag_stop (flag_stop),
|
||||||
|
.addr_stop (addr_stop),
|
||||||
|
.recvNetData (recvNetData),
|
||||||
|
.recvNetDataNd (recvNetDataNd)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -318,41 +357,38 @@ module system_top (
|
|||||||
|
|
||||||
// ******** Debug ********
|
// ******** Debug ********
|
||||||
|
|
||||||
ila_ad9361_rx u_ila_ad9361_rx (
|
// ila_ad9361_rx u_ila_ad9361_rx (
|
||||||
.clk (ad9361_rx_clk),
|
// .clk (ad9361_rx_clk),
|
||||||
.probe0(ad9361_rx_data_i),
|
// .probe0(ad9361_rx_data_i),
|
||||||
.probe1(ad9361_rx_data_q),
|
// .probe1(ad9361_rx_data_q),
|
||||||
.probe2(u_ad9361_mgc_pin_ctrl.flag_adjust)
|
// .probe2(u_ad9361_mgc_pin_ctrl.flag_adjust)
|
||||||
);
|
// );
|
||||||
|
|
||||||
ila_ad9361_tx u_ila_ad9361_tx (
|
// ila_ad9361_tx u_ila_ad9361_tx (
|
||||||
.clk (ad9361_tx_clk), // input wire clk
|
// .clk (ad9361_tx_clk), // input wire clk
|
||||||
.probe0(ad9361_tx_data_i), // input wire [11:0] probe0
|
// .probe0(ad9361_tx_data_i), // input wire [11:0] probe0
|
||||||
.probe1(ad9361_tx_data_q) // input wire [11:0] probe1
|
// .probe1(ad9361_tx_data_q) // input wire [11:0] probe1
|
||||||
);
|
// );
|
||||||
|
|
||||||
|
|
||||||
|
assign tx_start_vio_pos = tx_start_vio & ~tx_start_vio_d1;
|
||||||
|
always @(posedge clk_1x) begin
|
||||||
|
tx_start_vio_d1 <= tx_start_vio;
|
||||||
|
end
|
||||||
|
|
||||||
|
assign intr_2ps_vio_pos = intr_2ps_vio & ~intr_2ps_vio_d1;
|
||||||
|
always @(posedge clk_1x) begin
|
||||||
|
intr_2ps_vio_d1 <= intr_2ps_vio;
|
||||||
|
end
|
||||||
|
|
||||||
vio_phy_control u_vio_phy_control (
|
vio_phy_control u_vio_phy_control (
|
||||||
.clk (clk_1x), // input wire clk
|
.clk (clk_1x), // input wire clk
|
||||||
.probe_out0(phy_rst_vio), // output wire [0 : 0] probe_out0
|
.probe_out0(rst_manual), // output wire [0 : 0]
|
||||||
.probe_out1(phy_tx_test_flag_vio), // output wire [0 : 0] probe_out1
|
.probe_out1(node_id), // output wire [7 : 0]
|
||||||
.probe_out2(send_start) // output wire [0 : 0] probe_out2
|
.probe_out2(max_slot_num), // output wire [7 : 0]
|
||||||
|
.probe_out3(intr_2ps_vio), // output wire [0 : 0]
|
||||||
|
.probe_out4(tx_start_vio) // output wire [0 : 0]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
vio_gpio u_vio_gpio (
|
|
||||||
.clk (clk_poweron),
|
|
||||||
.probe_out0(rf_gpio),
|
|
||||||
.probe_out1(led_red),
|
|
||||||
.probe_out2(led_yellow),
|
|
||||||
.probe_out3(led_blue)
|
|
||||||
);
|
|
||||||
|
|
||||||
vio_tx_speed_mode u_vio_tx_speed_mode (
|
|
||||||
.clk (clk_1x),
|
|
||||||
.probe_out0(speed_mode)
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|||||||
+38
-76
@@ -18,99 +18,61 @@ module tdma #(
|
|||||||
parameter TIC_TO_PS_LEN = 1200000,
|
parameter TIC_TO_PS_LEN = 1200000,
|
||||||
parameter TIC_FRAME_SYNC = 42272
|
parameter TIC_FRAME_SYNC = 42272
|
||||||
) (
|
) (
|
||||||
input clk,
|
input clk,
|
||||||
input rst,
|
input rst,
|
||||||
input flag_is_master,
|
input flag_is_master, // TODO: refactor it to parameters
|
||||||
input flag_frame_sync,
|
input flag_frame_sync,
|
||||||
output intr_2ps,
|
output intr_2ps,
|
||||||
// output tic_hop,
|
(* KEEP = "TRUE" *) output tx_start,
|
||||||
output tx_start
|
(* KEEP = "TRUE" *) output rx_rst
|
||||||
);
|
);
|
||||||
|
|
||||||
// TODO: 需要检查综合后电路是否会被优化
|
// TODO: 需要检查综合后电路是否会被优化
|
||||||
// BUG: 需要修复bug,重构代码,把主从分开写,通过参数进行优化
|
// BUG: 需要修复bug,重构代码,把主从分开写,通过参数进行优化
|
||||||
// ******** Wire & Reg ********
|
// ******** Wire & Reg ********
|
||||||
reg flag_is_tx_slot;
|
reg flag_is_tx_slot;
|
||||||
// ******** Assingment ********
|
// ******** Assingment ********
|
||||||
|
|
||||||
// ******** Logic Block ********
|
// ******** Logic Block ********
|
||||||
|
|
||||||
generate
|
|
||||||
if (SLOT_LEN <= 65535) begin // slot len is small
|
|
||||||
reg [15:0] cnt;
|
|
||||||
always @(posedge clk) begin
|
|
||||||
if (rst) begin
|
|
||||||
cnt <= 16'd0;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
if (!flag_is_master && flag_frame_sync) begin
|
|
||||||
// slave update cnt
|
|
||||||
cnt <= TIC_FRAME_SYNC;
|
|
||||||
end
|
|
||||||
else if (cnt >= SLOT_LEN - 1) begin
|
|
||||||
cnt <= 16'd0;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
cnt <= cnt + 16'd1;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
assign tx_start = flag_is_tx_slot & (cnt == 16'd10); // just a num for avoiding the zero,(cnt is also 0 in rst state)
|
|
||||||
assign intr_2ps = ~flag_is_tx_slot & (cnt == TIC_TO_PS_LEN);
|
|
||||||
|
|
||||||
always @(posedge clk) begin
|
reg [23:0] cnt;
|
||||||
if (rst) begin
|
always @(posedge clk) begin
|
||||||
flag_is_tx_slot <= 0;
|
if (rst) begin
|
||||||
end
|
cnt <= 0;
|
||||||
else if (!flag_is_master && flag_frame_sync) begin
|
|
||||||
flag_is_tx_slot <= 0;
|
|
||||||
end
|
|
||||||
else if (cnt == 16'd1) begin
|
|
||||||
flag_is_tx_slot <= ~flag_is_tx_slot;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
reg [15:0] cnt_l;
|
if (!flag_is_master && flag_frame_sync) begin
|
||||||
reg [ 7:0] cnt_h;
|
// slave update cnt
|
||||||
always @(posedge clk) begin
|
cnt <= TIC_FRAME_SYNC;
|
||||||
if (rst) begin
|
end
|
||||||
cnt_l <= 16'd0;
|
else begin
|
||||||
cnt_h <= 8'd0;
|
// master
|
||||||
|
if (cnt < SLOT_LEN) begin
|
||||||
|
cnt <= cnt + 1;
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
if (!flag_is_master && flag_frame_sync) begin
|
cnt <= 0;
|
||||||
// slave update cnt
|
|
||||||
{cnt_h, cnt_l} <= TIC_FRAME_SYNC;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
// master
|
|
||||||
if ({cnt_h, cnt_l} >= SLOT_LEN) begin
|
|
||||||
cnt_h <= 8'd0;
|
|
||||||
cnt_l <= 16'd0;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
{cnt_h, cnt_l} <= {cnt_h, cnt_l} + 24'd1;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
assign tx_start = flag_is_tx_slot & ({cnt_h, cnt_l} == 16'd10);
|
|
||||||
assign intr_2ps = ~flag_is_tx_slot & ({cnt_h, cnt_l} == TIC_TO_PS_LEN);
|
|
||||||
|
|
||||||
always @(posedge clk) begin
|
|
||||||
if (rst) begin
|
|
||||||
flag_is_tx_slot <= 0;
|
|
||||||
end
|
|
||||||
else if (!flag_is_master && flag_frame_sync) begin
|
|
||||||
flag_is_tx_slot <= 0;
|
|
||||||
end
|
|
||||||
else if ({cnt_h, cnt_l} == 16'd1) begin
|
|
||||||
flag_is_tx_slot <= ~flag_is_tx_slot;
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
endgenerate
|
end
|
||||||
|
assign tx_start = flag_is_tx_slot & (cnt == 16'd10);
|
||||||
|
assign rx_rst = flag_is_tx_slot | (~flag_is_tx_slot & (cnt <= 16'd10));
|
||||||
|
assign intr_2ps = ~flag_is_tx_slot & (cnt == TIC_TO_PS_LEN);
|
||||||
|
|
||||||
|
always @(posedge clk) begin
|
||||||
|
if (rst) begin
|
||||||
|
flag_is_tx_slot <= 0;
|
||||||
|
end
|
||||||
|
else if (!flag_is_master && flag_frame_sync) begin
|
||||||
|
flag_is_tx_slot <= 0;
|
||||||
|
end
|
||||||
|
else if (cnt == 16'd1) begin
|
||||||
|
flag_is_tx_slot <= ~flag_is_tx_slot;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ******** Inst ********
|
// ******** Inst ********
|
||||||
|
|||||||
Reference in New Issue
Block a user