⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 top_fmdm_project.vhd

📁 ISE7.1
💻 VHD
📖 第 1 页 / 共 2 页
字号:
	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 + -