下面这段VHDL代码什么意思,本人小白,谢谢详解
时间:10-02
整理:3721RD
点击:
spi_divider : process (rst, clk_in)
begin
if rst = '1' then
clk_cnt <= 0;
clk_en <= '0';
spi_clk_int <= '1';
elsif falling_edge (clk_in) then
if clk_cnt = ((SYS_FREQ / SPI_FREQ) - 2) or
clk_cnt = ((SYS_FREQ / SPI_FREQ) - 3) then
clk_cnt <= clk_cnt + 1;
clk_en <= '0';
if tx_enable = '1' or rx_enable = '1' then
spi_clk_int <= '0';
else
spi_clk_int <= '1';
end if;
elsif clk_cnt = ((SYS_FREQ / SPI_FREQ) - 1) then
clk_cnt <= 0;
clk_en <= '1';
spi_clk_int <= '1';
else
clk_cnt <= clk_cnt + 1;
clk_en <= '0';
spi_clk_int <= '1';
end if;
end if;
end process;
begin
if rst = '1' then
clk_cnt <= 0;
clk_en <= '0';
spi_clk_int <= '1';
elsif falling_edge (clk_in) then
if clk_cnt = ((SYS_FREQ / SPI_FREQ) - 2) or
clk_cnt = ((SYS_FREQ / SPI_FREQ) - 3) then
clk_cnt <= clk_cnt + 1;
clk_en <= '0';
if tx_enable = '1' or rx_enable = '1' then
spi_clk_int <= '0';
else
spi_clk_int <= '1';
end if;
elsif clk_cnt = ((SYS_FREQ / SPI_FREQ) - 1) then
clk_cnt <= 0;
clk_en <= '1';
spi_clk_int <= '1';
else
clk_cnt <= clk_cnt + 1;
clk_en <= '0';
spi_clk_int <= '1';
end if;
end if;
end process;
从代码上看,给你提供一些线索吧
1、该段断码应该是一个SPI接口的时钟分频器或者SPI接口的时钟产生器
2、SYS_FREQ 和 SPI_FREQ应该在代码的前面有parameter参数定义,即这两个参数的定义值
根据实际的参数定义可以自己画一下时序图,比如rst复位信号后,各个信号的值,复位完成后,根据参数定义算出相应的if else 判断条件和执行语句,应该差不多就可以理解了
