📄 top_fmdm_project.vhd
字号:
rd_en: IN std_logic;
rd_clk: in std_logic;
ainit: IN std_logic:='0';
dout: OUT std_logic_VECTOR(7 downto 0);
full: OUT std_logic;
empty: OUT std_logic);
end component;
signal receive_finished_pulse:std_logic; --接收完成标志。做为时钟选择进程的启动脉冲以及mux_log_wide_narrow的使能
signal data_from_fifo:std_logic_vector(7 downto 0); ----------等待发送的数据,由FIFO传入
signal command_fromrs232:std_logic_vector(7 downto 0);----------收的命令,给select_clk,以及mux_log_wide_narrow
signal selected_clk:std_logic;-----最终选择的时钟
signal bufg_selected_clk:std_logic;------经过BUFG后的选择的时钟。
signal data_to_acumulator_log:std_logic_vector(11 downto 0):= (others=>'0');-------------------- 来自ADC_control_log进程。
signal data_to_acumulator_wide:std_logic_vector(11 downto 0);-------------------来自ADC_control_wide进程。
signal data_to_acumulator_narrow:std_logic_vector(11 downto 0);----------------- 来自ADC_control_narrow进程。
signal data_to_dataadjust_log:std_logic_vector(21 downto 0);-----------------------------------DATA输出至dataformat_adjust_log
signal data_to_dataadjust_wide:std_logic_vector(21 downto 0);-----------------------------------DATA输出至dataformat_adjust_wide
signal data_to_dataadjust_narrow:std_logic_vector(21 downto 0);-----------------------------------DATA输出至dataformat_adjust_narrow
signal SCLR_ofacummulator:std_logic; --------------来自accumulator_ctr_dataadjust.对应CE
signal en_dataadjust:std_logic; ------数据调整的使能脉冲
signal data_adjusted_log:std_logic_vector(7 downto 0);------- 调整后的数据输出
signal data_adjusted_wide:std_logic_vector(7 downto 0);------- 调整后的数据输出
signal data_adjusted_narrow:std_logic_vector(7 downto 0);------- 调整后的数据输出
signal mux_en_from_dataadjust:std_logic;----------------------由data_adjust产生的输出给mux_en的
signal data_to_fifo:std_logic_vector(7 downto 0);------------由mux选择输出至FIFO的数据
--signal tran_command_judgedfrom_empty:std_logic:='0'; -----由fifo的empty产生的串口发送命令
signal empty_offifo:std_logic:='1'; ----fifo的空标志
signal bclk1:std_logic;
--signal clkforfifo:std_logic;
signal uart_txd_done:std_logic;
signal fifo_enable_generate:std_logic;
signal transmitcommand:std_logic;
signal max3232_tr_fpga_buf:std_logic;
--signal reset_adc_log:std_logic_vector(11 downto 0);
begin
uart:top_uart port map(original_clk=>clk20mhz, -----20mhz clk to baud.直接连clk_20mhz
reset =>reset,-----------复位信号,直接连reset
rxd =>max3232_rec_fpga, ------ RS232's receive serial port直接连
xmit_cmd_p_in =>transmitcommand, --signal 发送命令,产生自readfifo_rs232进程
rec_ready =>receive_finished_pulse, --signal 接收完成标志。做为时钟选择进程的启动脉冲以及mux_log_wide_narrow的使能
txd_out =>max3232_tr_fpga_buf, -------------串口发送端直接连
txd_done_out =>uart_txd_done, -----发送完成信号, 不用.
txdbuf_in =>data_from_fifo, ----------signal 等待发送的数据,由FIFO传入。
rec_buf =>command_fromrs232,----------signal 接收的(数据)命令,给select_clk,以及mux_log_wide_narrow
bclk_for_outer=>bclk1); --------------- ------------signal 由baud进程产生给FIFO的时钟.
clk_select:select_clk port map(baud_clk=>bclk1,
delay_in =>delay_in,--总共有21条delay line
com_select_clk=>receive_finished_pulse, ---signal recready信号做进程敏感信号。即与此信号连此信号为高后根据接收寄存器判断选择哪个clk
com_from_serial_receiverrbuf=>command_fromrs232,----signal 接收到recready后,根据rbuf判断选择哪个clk
reset=>reset,
selected_delay_clk=>selected_clk-----signal 最终选择的时钟
) ;
buf_g: BUFG
port map(O =>bufg_selected_clk,
I =>selected_clk
);
adclog:adc_control port map( data_in =>adc_log,---ADC输入 对应log通路
data_out_toaccumulator =>data_to_acumulator_log,----signal ADC输出至至加法器
clk =>bufg_selected_clk,-----------------------------signal ADC输入时钟 与串口中selected_delay对应
reset=>reset);-----------------------------系统复位;
adcwide:adc_control port map( data_in =>adc_wide,---ADC输入
data_out_toaccumulator =>data_to_acumulator_wide,----signal ADC输出至wide累加法器
clk =>bufg_selected_clk,-----------------------------signal ADC输入时钟 与串口中selected_delay对应
reset=>reset);-----------------------------系统复位;
adcnarrow:adc_control port map( data_in =>adc_narrow,---ADC输入
data_out_toaccumulator =>data_to_acumulator_narrow,----signal ADC输出至narrow累加法器
clk =>bufg_selected_clk,-----------------------------signal ADC输入时钟 与串口中selected_delay对应
reset=>reset);-----------------------------系统复位;
acumulator_log:add_accumulator port map(
RESET=>reset,
B=>data_to_acumulator_log,--------------------------signal 来自ADC_control_log进程。
Q=>data_to_dataadjust_log,-----------------------------------signal输出至dataformat_adjust_log,21位
CLK=>bufg_selected_clk,----------------------------------signal来自clk_select进程
SCLR=>SCLR_ofacummulator);---------------------signal同上,但是要注意这里需要调试看是否正确。
acumulator_wide:add_accumulator port map(
RESET=>reset,
B=>data_to_acumulator_wide,--------------------------signal 来自ADC_control_wide进程。
Q=>data_to_dataadjust_wide,-----------------------------------signal输出至dataformat_adjust_wide
CLK=> bufg_selected_clk,----------------------------------signal来自clk_select进程
SCLR=>SCLR_ofacummulator);---------------------signal但是要注意这里需要调试看是否正确。
acumulator_narrow:add_accumulator port map(
RESET=>reset,
B=>data_to_acumulator_narrow,--------------------------signal 来自ADC_control_narrow进程。
Q=>data_to_dataadjust_narrow,-----------------------------------signal输出至dataformat_adjust_narrow
CLK=> bufg_selected_clk,----------------------------------signal来自clk_select进程
SCLR=>SCLR_ofacummulator);---------------------signal,但是要注意这里需要调试看是否正确。
accumulator_ctr:accumulator_ctr_dataadjust port map(
clk=>bufg_selected_clk,-------adc的时钟,即select_clk选择的时钟
accumulator_send_clk=>en_dataadjust,--数据调整脉冲.
accumulator_clr_clk=>SCLR_ofacummulator---控制accumulator发送,以及清零的脉冲。
); ---发送清零,
data_adjust_log:dataformat_adjust_log port map(
select_clk=>bufg_selected_clk,------选择的ADC时钟
reset=>reset,------------复位脉冲
en_clk_1024=>en_dataadjust, ------signal 求和点数决定的时钟
data_in=>data_to_dataadjust_log,-----signal 累加器的输出
dataout_log=>data_adjusted_log, -----signal调整后的数据输出
mux_en=>mux_en_from_dataadjust);-------signal输出至MUX_EN
data_adjust_narrow:dataformat_adjust_narrowfreq port map(
select_clk=>bufg_selected_clk,------选择的ADC时钟
reset=>reset,------------复位脉冲
en_clk_1024=>en_dataadjust, ------signal 求和点数决定的时钟
data_in=>data_to_dataadjust_narrow,-----signal 累加器的输出
dataout_narrowfreq=>data_adjusted_narrow);-----signal调整后的数据输出
-- mux_en=>mux_en_from_dataadjust);-------signal输出至MUX_EN
data_adjust_wide:dataformat_adjust_widefreq port map(
select_clk=>bufg_selected_clk,------选择的ADC时钟
reset=>reset,------------复位脉冲
en_clk_1024=>en_dataadjust, ------signal 求和点数决定的时钟
data_in=>data_to_dataadjust_wide,-----signal 累加器的输出
dataout_widefreq=>data_adjusted_wide);-----signal调整后的数据输出
mux_tripple:mux_log_wide_narrow port map(
baudclk=>bclk1,
reset=>reset,
mux_en=>mux_en_from_dataadjust,-----mux的使能,由data_adjust进程产生
comm_from_rs232=>command_fromrs232,----signal.RS232接收寄存器。
ready_rs232=>receive_finished_pulse,-------------signal---------------RS232接收完毕标志。
dataout_log=>data_adjusted_log,---singnal --来自dataformat_adjust_log输出的数据
dataout_widefreq=>data_adjusted_wide,---signal来自dataformat_adjust_wide输出的数据
dataout_narrowfreq=>data_adjusted_narrow,---signal 来自dataformat_adjust_narrow输出的数据
dataout_mux=>data_to_fifo);---signal.mux的输出
fifo:fifo_rs232 port map(
din=>data_to_fifo,--------signal,来自mux的输出
wr_en=>mux_en_from_dataadjust, ----signalmux的使能。
wr_clk=>bufg_selected_clk,---------------signal.
rd_en=> fifo_enable_generate,----signal 产生自readfifo_RS232进程。只要EMPTY非空。
rd_clk=>bclk1,
-- ainit=>ainit, ------- 不用是否可行?
dout=>data_from_fifo,------signal 传给发送器的数据。
-- full: OUT std_logic;
empty=>empty_offifo);----------------fifo的空标志
fifo_rs232_ctr:readfifo_RS232 port map(
reset=>reset,
rs232_clk_read=>bclk1, -----读FIFO的时钟,应当等于串口比特率
txd_done=>uart_txd_done,
fifo_empty=>empty_offifo,------根据FIFO的空标志,只要非空则可以读,即发送串口发送命令
fifo_enable=>fifo_enable_generate,
trans_com=>transmitcommand-----串口发送命令
) ;
--fifo_clk_control:fifo_clk_read port map(
--bclk=>bclk1,
--fifo_read_clk=>clkforfifo
--);
pulse_generate:narrow_wide_pulse_generate port map(
clk=>bufg_selected_clk,
reset=>reset,
narrow_wide_pulse=>fmdm_select);
adc1_clk<=bufg_selected_clk;
adc2_clk<=bufg_selected_clk;
test1<=transmitcommand; ---测试FIFO与UART的连接,发送命令脉冲。PCB板上第一排最后右边一个
test2<=data_from_fifo; ---由FIFO发给uart的数据。
test3<=max3232_tr_fpga_buf; ---测试串口发送的数据。
-- reset_adc_log<=(not reset)&(not reset)&(not reset)&(not reset)&(not reset)&(not reset)&(not reset)&(not reset)&(not reset)&(not reset)&(not reset)&(not reset);
max3232_tr_fpga<=max3232_tr_fpga_buf;
end Behavioral;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -