|
|
@ -22,29 +22,32 @@ module ttl_output #( |
|
|
|
/******************************************************************************* |
|
|
|
* 寄存器列表 * |
|
|
|
*******************************************************************************/ |
|
|
|
//!信号处理模式 0:固定输出低电平,1:固定输出高电平,2:分频倍频模式,3:转发模式,4:测试模式 |
|
|
|
reg [31:0] reg_signal_process_mode; |
|
|
|
//!信号处理模式 0:固定输出低电平,1:固定输出高电平,2:触发模式,3:转发模式,4:测试模式 |
|
|
|
reg [31:0] reg1_signal_process_mode; |
|
|
|
//!TTLOUT_信号选择器 |
|
|
|
reg [31:0] reg_input_signal_select; |
|
|
|
reg [31:0] reg2_input_signal_select; |
|
|
|
//!TTLOUT_分频器 |
|
|
|
reg [31:0] reg_pllout_freq_division_ctrl; |
|
|
|
reg [31:0] reg3_pllout_freq_division_ctrl; |
|
|
|
//!TTLOUT_频率倍增器 |
|
|
|
reg [31:0] reg_pllout_freq_multiplication_ctrl; |
|
|
|
reg [31:0] reg4_pllout_freq_multiplication_ctrl; |
|
|
|
//!TTLOUT_极性控制寄存器 |
|
|
|
reg [31:0] reg_pllout_polarity_ctrl; |
|
|
|
reg [31:0] reg5_pllout_polarity_ctrl; |
|
|
|
//!TTLOUT_触发信号边沿类型 |
|
|
|
reg [31:0] reg_pllout_trigger_edge_select; |
|
|
|
reg [31:0] reg6_pllout_trigger_edge_select; |
|
|
|
//!转发模式下的极性控制 |
|
|
|
reg [31:0] reg_forward_mode_polarity_ctrl; |
|
|
|
reg [31:0] reg7_forward_mode_polarity_ctrl; |
|
|
|
//!占位 |
|
|
|
reg [31:0] reg_placeholder0; |
|
|
|
// !频率探测偏差 |
|
|
|
reg [31:0] reg_freq_detect_bias; |
|
|
|
|
|
|
|
reg [31:0] reg8_placeholder0; |
|
|
|
//!频率探测偏差 |
|
|
|
reg [31:0] reg9_freq_detect_bias; |
|
|
|
//!分频倍频后的信号脉宽 |
|
|
|
reg [31:0] regA_pluse_width_ctrl; |
|
|
|
//!分频后信号延迟 |
|
|
|
reg [31:0] regB_pluse_delay_ctrl; |
|
|
|
//!输入信号频率探测 read only |
|
|
|
wire [31:0] reg_sig_in_freq_detect; |
|
|
|
wire [31:0] regE_sig_in_freq_detect; |
|
|
|
//!输出信号频率探测 read only |
|
|
|
wire [31:0] reg_sig_out_freq_detect; |
|
|
|
wire [31:0] regF_sig_out_freq_detect; |
|
|
|
|
|
|
|
wire [31:0] reg_wr_index; //!寄存器写入时相对地址 |
|
|
|
wire signal_in_choose; //!原始信号 |
|
|
@ -57,11 +60,11 @@ module ttl_output #( |
|
|
|
//信号流转图 |
|
|
|
// |
|
|
|
// signal_in[](原始信号) |
|
|
|
// ---> reg_input_signal_select -->signal_in_choose(信号选择器) |
|
|
|
// ---> reg2_input_signal_select -->signal_in_choose(信号选择器) |
|
|
|
// --> |
|
|
|
// reg_pllout_trigger_edge_select |
|
|
|
// reg_pllout_freq_division_ctrl ---> signal_in_af_pll(经分频倍频后的信号) |
|
|
|
// reg_pllout_freq_multiplication_ctrl |
|
|
|
// reg6_pllout_trigger_edge_select |
|
|
|
// reg3_pllout_freq_division_ctrl ---> signal_in_af_pll(经分频倍频后的信号) |
|
|
|
// reg4_pllout_freq_multiplication_ctrl |
|
|
|
// ---> signal_af_pll_af_polarity_ctrl |
|
|
|
// |
|
|
|
// |
|
|
@ -82,17 +85,19 @@ module ttl_output #( |
|
|
|
.wr_data (wr_data), |
|
|
|
.wr_en (wr_en), |
|
|
|
.rd_data (rd_data), |
|
|
|
.reg1 (reg_signal_process_mode), |
|
|
|
.reg2 (reg_input_signal_select), |
|
|
|
.reg3 (reg_pllout_freq_division_ctrl), |
|
|
|
.reg4 (reg_pllout_freq_multiplication_ctrl), |
|
|
|
.reg5 (reg_pllout_polarity_ctrl), |
|
|
|
.reg6 (reg_pllout_trigger_edge_select), |
|
|
|
.reg7 (reg_forward_mode_polarity_ctrl), |
|
|
|
.reg8 (reg_placeholder0), |
|
|
|
.reg9 (reg_freq_detect_bias), |
|
|
|
.regE (reg_sig_in_freq_detect), |
|
|
|
.regF (reg_sig_out_freq_detect), |
|
|
|
.reg1 (reg1_signal_process_mode), |
|
|
|
.reg2 (reg2_input_signal_select), |
|
|
|
.reg3 (reg3_pllout_freq_division_ctrl), |
|
|
|
.reg4 (reg4_pllout_freq_multiplication_ctrl), |
|
|
|
.reg5 (reg5_pllout_polarity_ctrl), |
|
|
|
.reg6 (reg6_pllout_trigger_edge_select), |
|
|
|
.reg7 (reg7_forward_mode_polarity_ctrl), |
|
|
|
.reg8 (reg8_placeholder0), |
|
|
|
.reg9 (reg9_freq_detect_bias), |
|
|
|
.regA (regA_pluse_width_ctrl), |
|
|
|
.regB (regB_pluse_delay_ctrl), |
|
|
|
.regE (regE_sig_in_freq_detect), |
|
|
|
.regF (regF_sig_out_freq_detect), |
|
|
|
.reg_wr_sig(reg_wr_sig), |
|
|
|
.reg_index (reg_wr_index) |
|
|
|
); |
|
|
@ -100,27 +105,31 @@ module ttl_output #( |
|
|
|
//!寄存器写入逻辑 |
|
|
|
always @(posedge clk or negedge rst_n) begin |
|
|
|
if (!rst_n) begin |
|
|
|
reg_signal_process_mode <= 0; |
|
|
|
reg_input_signal_select <= 0; |
|
|
|
reg_pllout_freq_division_ctrl <= 0; |
|
|
|
reg_pllout_freq_multiplication_ctrl <= 0; |
|
|
|
reg_pllout_polarity_ctrl <= 0; |
|
|
|
reg_pllout_trigger_edge_select <= 1; |
|
|
|
reg_forward_mode_polarity_ctrl <= 0; |
|
|
|
reg_placeholder0 <= 0; |
|
|
|
reg_freq_detect_bias <= `FREQ_DETECT_BIAS_DEFAULT; |
|
|
|
reg1_signal_process_mode <= 0; |
|
|
|
reg2_input_signal_select <= 0; |
|
|
|
reg3_pllout_freq_division_ctrl <= 0; |
|
|
|
reg4_pllout_freq_multiplication_ctrl <= 0; |
|
|
|
reg5_pllout_polarity_ctrl <= 0; |
|
|
|
reg6_pllout_trigger_edge_select <= 1; |
|
|
|
reg7_forward_mode_polarity_ctrl <= 0; |
|
|
|
reg8_placeholder0 <= 0; |
|
|
|
reg9_freq_detect_bias <= `FREQ_DETECT_BIAS_DEFAULT; |
|
|
|
regA_pluse_width_ctrl <= `TTL_OUTPUT_TRIGGER_MODE_SIG_WIDTH; |
|
|
|
regB_pluse_delay_ctrl <= 0; |
|
|
|
end else begin |
|
|
|
if (reg_wr_sig) begin |
|
|
|
case (reg_wr_index) |
|
|
|
1: reg_signal_process_mode <= wr_data; |
|
|
|
2: reg_input_signal_select <= wr_data; |
|
|
|
3: reg_pllout_freq_division_ctrl <= wr_data; |
|
|
|
4: reg_pllout_freq_multiplication_ctrl <= wr_data; |
|
|
|
5: reg_pllout_polarity_ctrl <= wr_data; |
|
|
|
6: reg_pllout_trigger_edge_select <= wr_data; |
|
|
|
7: reg_forward_mode_polarity_ctrl <= wr_data; |
|
|
|
8: reg_placeholder0 <= wr_data; |
|
|
|
9: reg_freq_detect_bias <= wr_data; |
|
|
|
1: reg1_signal_process_mode <= wr_data; |
|
|
|
2: reg2_input_signal_select <= wr_data; |
|
|
|
3: reg3_pllout_freq_division_ctrl <= wr_data; |
|
|
|
4: reg4_pllout_freq_multiplication_ctrl <= wr_data; |
|
|
|
5: reg5_pllout_polarity_ctrl <= wr_data; |
|
|
|
6: reg6_pllout_trigger_edge_select <= wr_data; |
|
|
|
7: reg7_forward_mode_polarity_ctrl <= wr_data; |
|
|
|
8: reg8_placeholder0 <= wr_data; |
|
|
|
9: reg9_freq_detect_bias <= wr_data; |
|
|
|
10: regA_pluse_width_ctrl <= wr_data; |
|
|
|
32'hB: regB_pluse_delay_ctrl <= wr_data; |
|
|
|
default: begin |
|
|
|
end |
|
|
|
endcase |
|
|
@ -130,7 +139,7 @@ module ttl_output #( |
|
|
|
|
|
|
|
//!信号选择器 |
|
|
|
zutils_multiplexer_32t1 signal_in_multiplexer ( |
|
|
|
.chooseindex(reg_input_signal_select), |
|
|
|
.chooseindex(reg2_input_signal_select), |
|
|
|
.signal (signal_in), |
|
|
|
.signalout (signal_in_choose) |
|
|
|
); |
|
|
@ -140,38 +149,49 @@ module ttl_output #( |
|
|
|
.clk (clk), |
|
|
|
.rst_n (rst_n), |
|
|
|
.insignal (signal_in_choose), |
|
|
|
.trigger_eage_type (reg_pllout_trigger_edge_select[0]), |
|
|
|
.freq_detect_bias (reg_freq_detect_bias), |
|
|
|
.freq_division (reg_pllout_freq_division_ctrl), |
|
|
|
.freq_multiplication(reg_pllout_freq_multiplication_ctrl), |
|
|
|
.polarity_ctrl (reg_pllout_polarity_ctrl[0]), |
|
|
|
.trigger_eage_type (reg6_pllout_trigger_edge_select[0]), |
|
|
|
.freq_detect_bias (reg9_freq_detect_bias), |
|
|
|
.freq_division (reg3_pllout_freq_division_ctrl), |
|
|
|
.freq_multiplication(reg4_pllout_freq_multiplication_ctrl), |
|
|
|
.polarity_ctrl (1'd0), |
|
|
|
.cfg_change (reg_wr_sig), |
|
|
|
.outsignal (signal_in_af_pll) |
|
|
|
// .outsignal (signal_in_af_pll), |
|
|
|
.output_trigger_sig (signal_in_af_pll_trigger_sig) |
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
//!100HZ测试信号发生器 |
|
|
|
zutils_pwm_generator #( |
|
|
|
.SYS_CLOCK_FREQ(SYS_CLOCK_FREQ), |
|
|
|
.OUTPUT_FREQ(100) |
|
|
|
) pwm100hz_gen ( |
|
|
|
//!脉冲生成 |
|
|
|
zutils_pluse_generator _pluse_generator ( |
|
|
|
.clk (clk), |
|
|
|
.rst_n (rst_n), |
|
|
|
.output_signal(signal_test) |
|
|
|
.pluse_width (regA_pluse_width_ctrl), |
|
|
|
.pluse_delay (regB_pluse_delay_ctrl), |
|
|
|
.trigger (signal_in_af_pll_trigger_sig), |
|
|
|
.output_signal(signal_in_af_pll_raw) |
|
|
|
); |
|
|
|
|
|
|
|
assign signal_in_af_pll = signal_in_af_pll_raw ^ reg5_pllout_polarity_ctrl[0]; |
|
|
|
|
|
|
|
//!100HZ测试信号发生器 |
|
|
|
// zutils_pwm_generator #( |
|
|
|
// .SYS_CLOCK_FREQ(SYS_CLOCK_FREQ), |
|
|
|
// .OUTPUT_FREQ(100) |
|
|
|
// ) pwm100hz_gen ( |
|
|
|
// .clk (clk), |
|
|
|
// .rst_n (rst_n), |
|
|
|
// .output_signal(signal_test) |
|
|
|
// ); |
|
|
|
|
|
|
|
|
|
|
|
assign signal_in_af_forward_mode_polarity_ctrl = signal_in_choose ^ reg_forward_mode_polarity_ctrl[0]; |
|
|
|
|
|
|
|
assign signal_in_af_forward_mode_polarity_ctrl = signal_in_choose ^ reg7_forward_mode_polarity_ctrl[0]; |
|
|
|
|
|
|
|
//!信号输出选择器 |
|
|
|
zutils_multiplexer_8t1 signal_output_multiplexer ( |
|
|
|
.chooseindex(reg_signal_process_mode), |
|
|
|
.chooseindex(reg1_signal_process_mode), |
|
|
|
.signal0 (1'b0), |
|
|
|
.signal1 (1'b1), |
|
|
|
.signal2 (signal_in_af_pll), |
|
|
|
.signal3 (signal_in_af_forward_mode_polarity_ctrl), |
|
|
|
.signal4 (signal_test), |
|
|
|
.signal4 (1'b0), |
|
|
|
.signal5 (1'b0), |
|
|
|
.signal6 (1'b0), |
|
|
|
.signal7 (1'b0), |
|
|
@ -179,21 +199,20 @@ module ttl_output #( |
|
|
|
); |
|
|
|
|
|
|
|
// |
|
|
|
// |
|
|
|
zutils_freq_detector_v2 in_freq_detector ( |
|
|
|
.clk (clk), |
|
|
|
.rst_n (rst_n), |
|
|
|
.freq_detect_bias(reg_freq_detect_bias), |
|
|
|
.freq_detect_bias(reg9_freq_detect_bias), |
|
|
|
.pluse_input (signal_in_choose), |
|
|
|
.pluse_width_cnt (reg_sig_in_freq_detect) |
|
|
|
.pluse_width_cnt (regE_sig_in_freq_detect) |
|
|
|
); |
|
|
|
|
|
|
|
zutils_freq_detector_v2 output_freq_detector ( |
|
|
|
.clk (clk), |
|
|
|
.rst_n (rst_n), |
|
|
|
.freq_detect_bias(reg_freq_detect_bias), |
|
|
|
.freq_detect_bias(reg9_freq_detect_bias), |
|
|
|
.pluse_input (ttloutput), |
|
|
|
.pluse_width_cnt (reg_sig_out_freq_detect) |
|
|
|
.pluse_width_cnt (regF_sig_out_freq_detect) |
|
|
|
); |
|
|
|
assign ttloutput_state_led = 1; |
|
|
|
|
|
|
|