Browse Source

update

master
zhaohe 1 year ago
parent
commit
f64a6052e0
  1. 96
      led_test.pds
  2. 251
      source/src/business/record_sig_generator.v
  3. 4
      source/src/output/camera_sync_signal_output.v
  4. 49
      source/src/top.v

96
led_test.pds

@ -1,5 +1,5 @@
(_flow fab_demo "2021.1-SP7"
(_comment "Generated by Fabric Compiler (version on 2021.1-SP7<build 86875>) at Tue Mar 5 19:27:36 2024")
(_comment "Generated by Fabric Compiler (version on 2021.1-SP7<build 86875>) at Tue Mar 5 23:58:26 2024")
(_version "1.0.5")
(_status "initial")
(_project
@ -19,7 +19,7 @@
(_input
(_file "source/src/top.v" + "Top:"
(_format verilog)
(_timespec "2024-03-05T16:15:17")
(_timespec "2024-03-05T23:54:38")
)
(_file "source/src/spi_reg_reader.v"
(_format verilog)
@ -205,6 +205,14 @@
(_format verilog)
(_timespec "2024-03-05T16:10:23")
)
(_file "source/src/output/camera_sync_signal_output.v"
(_format verilog)
(_timespec "2024-03-05T22:17:42")
)
(_file "source/src/business/record_sig_generator.v"
(_format verilog)
(_timespec "2024-03-05T23:58:23")
)
)
)
(_widget wgt_my_ips_src
@ -271,21 +279,21 @@
)
(_task tsk_compile
(_command cmd_compile
(_gci_state (_integer 2))
(_gci_state (_integer 3))
(_db_output
(_file "compile/Top_comp.adf"
(_format adif)
(_timespec "2024-03-05T19:17:20")
(_timespec "2024-03-05T23:56:26")
)
)
(_output
(_file "compile/Top.cmr"
(_format verilog)
(_timespec "2024-03-05T19:17:18")
(_timespec "2024-03-05T23:56:23")
)
(_file "compile/cmr.db"
(_format text)
(_timespec "2024-03-05T19:17:21")
(_timespec "2024-03-05T23:56:26")
)
)
)
@ -295,27 +303,27 @@
)
(_task tsk_synthesis
(_command cmd_synthesize
(_gci_state (_integer 2))
(_gci_state (_integer 3))
(_option ads (_switch ON))
(_option selected_syn_tool_opt (_integer 2))
(_db_output
(_file "synthesize/Top_syn.adf"
(_format adif)
(_timespec "2024-03-05T19:19:41")
(_timespec "2024-03-05T23:58:05")
)
)
(_output
(_file "synthesize/Top_syn.vm"
(_format structural_verilog)
(_timespec "2024-03-05T19:19:53")
(_timespec "2024-03-05T23:58:14")
)
(_file "synthesize/Top.snr"
(_format text)
(_timespec "2024-03-05T19:20:01")
(_timespec "2024-03-05T23:58:20")
)
(_file "synthesize/snr.db"
(_format text)
(_timespec "2024-03-05T19:20:01")
(_timespec "2024-03-05T23:58:20")
)
)
)
@ -332,25 +340,25 @@
)
(_task tsk_devmap
(_command cmd_devmap
(_gci_state (_integer 2))
(_gci_state (_integer 3))
(_db_output
(_file "device_map/Top_map.adf"
(_format adif)
(_timespec "2024-03-05T19:20:16")
(_timespec "2024-03-05T23:58:26")
)
)
(_output
(_file "device_map/Top_dmr.prt"
(_format text)
(_timespec "2024-03-05T19:20:04")
(_timespec "2024-03-05T23:58:23")
)
(_file "device_map/Top.dmr"
(_format text)
(_timespec "2024-03-05T19:20:16")
(_timespec "2024-03-05T23:58:26")
)
(_file "device_map/dmr.db"
(_format text)
(_timespec "2024-03-05T19:20:17")
(_timespec "2024-03-05T23:58:26")
)
)
)
@ -359,7 +367,7 @@
(_input
(_file "device_map/led_test.pcf"
(_format pcf)
(_timespec "2024-03-05T19:20:16")
(_timespec "2024-03-05T23:58:26")
)
)
)
@ -369,40 +377,8 @@
)
(_task tsk_pnr
(_command cmd_pnr
(_gci_state (_integer 2))
(_gci_state (_integer 0))
(_option mode (_string "fast"))
(_db_output
(_file "place_route/Top_pnr.adf"
(_format adif)
(_timespec "2024-03-05T19:26:10")
)
)
(_output
(_file "place_route/Top.prr"
(_format text)
(_timespec "2024-03-05T19:26:10")
)
(_file "place_route/Top_prr.prt"
(_format text)
(_timespec "2024-03-05T19:26:08")
)
(_file "place_route/clock_utilization.txt"
(_format text)
(_timespec "2024-03-05T19:26:08")
)
(_file "place_route/Top_plc.adf"
(_format adif)
(_timespec "2024-03-05T19:21:27")
)
(_file "place_route/Top_pnr.netlist"
(_format text)
(_timespec "2024-03-05T19:26:10")
)
(_file "place_route/prr.db"
(_format text)
(_timespec "2024-03-05T19:26:12")
)
)
)
(_widget wgt_power_calculator
(_attribute _click_to_run (_switch ON))
@ -431,25 +407,7 @@
)
(_task tsk_gen_bitstream
(_command cmd_gen_bitstream
(_gci_state (_integer 2))
(_output
(_file "generate_bitstream/Top.sbit"
(_format text)
(_timespec "2024-03-05T19:27:34")
)
(_file "generate_bitstream/Top.smsk"
(_format text)
(_timespec "2024-03-05T19:27:34")
)
(_file "generate_bitstream/Top.bgr"
(_format text)
(_timespec "2024-03-05T19:27:34")
)
(_file "generate_bitstream/bgr.db"
(_format text)
(_timespec "2024-03-05T19:27:36")
)
)
(_gci_state (_integer 0))
)
)
)

251
source/src/business/record_sig_generator.v

@ -0,0 +1,251 @@
module record_sig_generator #(
parameter REG_START_ADD = 0,
parameter SYS_CLOCK_FREQ = 10000000,
parameter TEST = 0
) (
input clk,
input rst_n,
input [31:0] addr,
input [31:0] wr_data,
input wr_en,
output wire [31:0] rd_data,
input wire ttlin1_sig,
input wire ttlin2_sig,
input wire ttlin3_sig,
input wire ttlin4_sig,
input wire frame_freq_sig,
input wire sys_timecode_tigger_sig,
input wire [63:0] sys_timecode_data,
output reg out_record_en_sig, //!录制使能信号
output reg out_record_exposure_sig //!录制曝光信号
);
reg [31:0] reg1_ctrl_control_mode; //! 控制模式选择寄存器
reg [31:0] reg2_timecode_start0; //! 时码启动寄存器0
reg [31:0] reg3_timecode_start1; //! 时码启动寄存器1
reg [31:0] reg4_timecode_stop0; //! 时码停止寄存器0
reg [31:0] reg5_timecode_stop1; //! 时码停止寄存器1
reg [31:0] reg6_timecode_control_flag; //! 使能时码控制启动使能使能时码控制停止
reg [31:0] reg7_ttlin_trigger_sig_source; //! TTL触发信号选择
reg [31:0] reg8_ttlin_trigger_level; //! TTL输入信号极性反转
reg [31:0] reg9_exposure_time; //! 曝光时长
reg [31:0] regA_exposure_delay; //! 曝光信号延迟
reg [31:0] regB_manual_ctrl; //! 手动控制
localparam REGA_MANUAL_CTRL_REG_INDEX = 32'd11;
reg [31:0] regD_start_timecode_snapshot0; //!
reg [31:0] regE_start_timecode_snapshot1; //!
reg [31:0] regF_record_state; //!工作状态 read only
wire [31:0] reg_wr_index;
zutils_register_advanced #(
.REG_START_ADD(REG_START_ADD)
) _register (
.clk (clk),
.rst_n (rst_n),
.addr (addr),
.wr_data(wr_data),
.wr_en (wr_en),
.rd_data(rd_data),
.reg1(reg1_ctrl_control_mode),
.reg2(reg2_timecode_start0),
.reg3(reg3_timecode_start1),
.reg4(reg4_timecode_stop0),
.reg5(reg5_timecode_stop1),
.reg6(reg6_timecode_control_flag),
.reg7(reg7_ttlin_trigger_sig_source),
.reg8(reg8_ttlin_trigger_level),
.reg9(reg9_exposure_time),
.regA(regA_exposure_delay),
.regB(regB_manual_ctrl),
.regD(regD_start_timecode_snapshot0),
.regE(regE_start_timecode_snapshot1),
.regF(regF_record_state),
.reg_wr_sig(reg_wr_sig),
.reg_index (reg_wr_index)
);
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
reg1_ctrl_control_mode <= 1;
reg2_timecode_start0 <= 0;
reg3_timecode_start1 <= 0;
reg4_timecode_stop0 <= 0;
reg5_timecode_stop1 <= 0;
reg6_timecode_control_flag <= 32'hFFFF_FFFF;
reg7_ttlin_trigger_sig_source <= 1;
reg8_ttlin_trigger_level <= 1;
reg9_exposure_time <= 32'd1000; //100us
regA_exposure_delay <= 0;
regB_manual_ctrl <= 0;
end else begin
if (reg_wr_sig) begin
case (reg_wr_index)
1: reg1_ctrl_control_mode <= wr_data;
2: reg2_timecode_start0 <= wr_data;
3: reg3_timecode_start1 <= wr_data;
4: reg4_timecode_stop0 <= wr_data;
5: reg5_timecode_stop1 <= wr_data;
6: reg6_timecode_control_flag <= wr_data;
7: reg7_ttlin_trigger_sig_source <= wr_data;
8: reg8_ttlin_trigger_level <= wr_data;
9: reg9_exposure_time <= wr_data;
10: regA_exposure_delay <= wr_data;
default: begin
end
endcase
end
end
end
wire ttl_in_choose; //! 选中的ttl触发信号(已经经过电平翻转)
wire timecode_start_trigger_sig; //!timecode启动信号
wire timecode_stop_trigger_sig; //!timecode停止信号
wire record_exposure_sig; //!曝光信号
wire frame_freq_sig_rising_edge;
zutils_multiplexer_32t1_v2 ttlin_level_trigger_multi (
.chooseindex(reg7_ttlin_trigger_sig_source),
//in
.in1 (ttlin1_sig ^ (!reg8_ttlin_trigger_level[0])),
.in2 (ttlin2_sig ^ (!reg8_ttlin_trigger_level[0])),
.in3 (ttlin3_sig ^ (!reg8_ttlin_trigger_level[0])),
.in4 (ttlin4_sig ^ (!reg8_ttlin_trigger_level[0])),
//out
.out (ttl_in_choose)
);
/*******************************************************************************
* StartSig输出 *
*******************************************************************************/
timecode_comparator timecode_comparator_inst0 (
.timecodeA0(sys_timecode_data[31:0]),
.timecodeA1(sys_timecode_data[63:32]),
.timecodeB0(reg2_timecode_start0),
.timecodeB1(reg3_timecode_start1),
.eq (timecode_start_trigger_sig)
);
timecode_comparator timecode_comparator_inst1 (
.timecodeA0(sys_timecode_data[31:0]),
.timecodeA1(sys_timecode_data[63:32]),
.timecodeB0(reg4_timecode_stop0),
.timecodeB1(reg5_timecode_stop1),
.eq (timecode_stop_trigger_sig)
);
zutils_edge_detecter _signal_in (
.clk (clk),
.rst_n (rst_n),
.in_signal (frame_freq_sig),
.in_signal_rising_edge(frame_freq_sig_rising_edge)
);
zutils_pluse_generator _pluse_generator (
.clk (clk),
.rst_n (rst_n),
.pluse_width (reg9_exposure_time),
.pluse_delay (regA_exposure_delay),
.trigger (frame_freq_sig_rising_edge),
.output_signal(record_exposure_sig)
);
reg en_state;
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
en_state <= 0;
end else begin
case (reg1_ctrl_control_mode)
1: begin
//手动控制触发启动停止
if (reg_wr_sig && reg_wr_index == REGA_MANUAL_CTRL_REG_INDEX) begin
if (wr_data[0] == 1) begin
en_state <= 1;
end else begin
en_state <= 0;
end
end
end
2: begin
//TIMECODE控制启动
if (timecode_start_trigger_sig && sys_timecode_tigger_sig && reg6_timecode_control_flag[0]) begin
en_state <= 1;
end else if (timecode_stop_trigger_sig && sys_timecode_tigger_sig && reg6_timecode_control_flag[1]) begin
en_state <= 0;
end else if (reg_wr_sig && reg_wr_index == REGA_MANUAL_CTRL_REG_INDEX) begin
if (wr_data[0] == 1) begin
en_state <= 1;
end else begin
en_state <= 0;
end
end
end
3: begin
//外部电平控制
if (ttl_in_choose == 1) begin
en_state <= 1;
end else begin
en_state <= 0;
end
end
default: begin
end
endcase
end
end
reg en_state_af_sync;
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
en_state_af_sync <= 0;
end else begin
case (en_state)
0: begin
if (en_state_af_sync != en_state) begin
en_state_af_sync <= 0;
end
end
1: begin
if (en_state_af_sync == 0) begin
if (frame_freq_sig_rising_edge) begin
regD_start_timecode_snapshot0 <= sys_timecode_data[31:0];
regE_start_timecode_snapshot1 <= sys_timecode_data[63:32];
en_state_af_sync <= 1;
end
end
end
endcase
end
end
always @(*) begin
regF_record_state[0] <= en_state_af_sync;
out_record_en_sig <= en_state_af_sync;
out_record_exposure_sig <= out_record_en_sig & record_exposure_sig;
end
endmodule

4
source/src/output/camera_sync_signal_output.v

@ -40,7 +40,7 @@ module camera_sync_signal_output #(
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
reg1_pulse_mode_valid_len <= 0;
reg1_pulse_mode_valid_len <= SYS_CLOCK_FREQ / 1000;
end else begin
if (reg_wr_sig) begin
case (reg_wr_index)
@ -71,7 +71,7 @@ module camera_sync_signal_output #(
zutils_pluse_generator _pluse_generator (
.clk (clk),
.rst_n (rst_n),
.pluse_width (SYS_CLOCK_FREQ / 1000), //100us
.pluse_width (reg1_pulse_mode_valid_len), //100us
.pluse_delay (0),
.trigger (frame_sig_rising_edge),
.output_signal(frame_sig_fa_process)

49
source/src/top.v

@ -124,7 +124,7 @@ module Top (
wire signal_sys_clk_output; //! 系统时钟输出
wire signal_sys_genlock_output; //! 系统GENLOCK输出
wire signal_sys_timecode_freq_output; //! 系统时间码频率输出
wire signal_business_record_sig; //! 业务摄影状态信号
wire signal_business_record_en_sig; //! 业务摄影状态信号
wire signal_business_record_exposure_sig; //! 业务摄影拍照曝光信号
wire internal_timecode_tigger_sig; //!内部timecode频率信号
@ -157,7 +157,7 @@ module Top (
assign sig_src[`SIGNAL_SYS_CLK_OUTPUT] = signal_sys_clk_output;
assign sig_src[`SIGNAL_SYS_GENLOCK_OUTPUT] = signal_sys_genlock_output;
assign sig_src[`SIGNAL_SYS_TIMECODE_FREQ_OUTPUT] = signal_sys_timecode_freq_output;
assign sig_src[`SIGNAL_BUSINESS_RECORD_SIG] = signal_business_record_sig;
assign sig_src[`SIGNAL_BUSINESS_RECORD_SIG] = signal_business_record_en_sig;
assign sig_src[`SIGNAL_BUSINESS_RECORD_EXPOSURE_SIG] = signal_business_record_exposure_sig;
assign signal_logic0 = 1'b0;
@ -552,6 +552,51 @@ module Top (
);
record_sig_generator #(
.REG_START_ADD(`REGADDOFF__RECORD_SIG_GENERATOR),
.SYS_CLOCK_FREQ(SYS_CLOCK_FREQ),
.TEST(0)
) record_sig_generator0 (
.clk (sys_clk),
.rst_n(sys_rst_n),
.addr (RegReaderBus_addr),
.wr_data(RegReaderBus_wr_data),
.wr_en (RegReaderBus_wr_en),
.rd_data(rd_data_module_record_sig_generator),
.ttlin1_sig(signal_ttlin1),
.ttlin2_sig(signal_ttlin2),
.ttlin3_sig(signal_ttlin3),
.ttlin4_sig(signal_ttlin4),
.frame_freq_sig (signal_sys_clk_output),
.sys_timecode_tigger_sig(sys_timecode_tigger_sig),
.sys_timecode_data (sys_timecode_data),
.out_record_en_sig (signal_business_record_en_sig),
.out_record_exposure_sig(signal_business_record_exposure_sig)
);
camera_sync_signal_output #(
.REG_START_ADD (`REGADDOFF__CAMERA_SYNC_OUT),
.SYS_CLOCK_FREQ(SYS_CLOCK_FREQ)
) camera_sync_signal_output0 (
.clk (sys_clk),
.rst_n(sys_rst_n),
.addr (RegReaderBus_addr),
.wr_data(RegReaderBus_wr_data),
.wr_en (RegReaderBus_wr_en),
.rd_data(rd_data_module_camera_sync_out),
.frame_sig (signal_business_record_exposure_sig),
.record_en_sig(signal_business_record_en_sig),
.stm32if_camera_sync_out(stm32if_camera_sync_out),
.stm32if_record_sync_out(stm32if_start_signal_out)
);
assign debug_signal_output[0] = sys_clk;
assign debug_signal_output[1] = sync_ttl_in1;
assign debug_signal_output[2] = sync_ttl_in2;

Loading…
Cancel
Save