|
发表于 2021-10-20 13:32:39
|
显示全部楼层
本帖最后由 innovation 于 2021-10-20 13:55 编辑
帮你把代码微调一下,你和你最开始贴出的代码比对:
- process(Ctl, BAUD_CLK_TICKS)
- begin
- case Ctl is
- when B"0000" => BAUD_CLK_TICKS <= CONV_STD_LOGIC_VECTOR(10416 - 1, 14); -- 减1在这里完成不需要消耗任何电路资源
- when B"0001" => BAUD_CLK_TICKS <= CONV_STD_LOGIC_VECTOR( 6944 - 1, 14);
- when B"0010" => BAUD_CLK_TICKS <= CONV_STD_LOGIC_VECTOR( 5208 - 1, 14);
- when B"0011" => BAUD_CLK_TICKS <= CONV_STD_LOGIC_VECTOR( 2604 - 1, 14);
- when B"0100" => BAUD_CLK_TICKS <= CONV_STD_LOGIC_VECTOR( 1736 - 1, 14);
- when B"0101" => BAUD_CLK_TICKS <= CONV_STD_LOGIC_VECTOR( 868 - 1, 14);
- when B"0110" => BAUD_CLK_TICKS <= CONV_STD_LOGIC_VECTOR( 434 - 1, 14);
- when B"0111" => BAUD_CLK_TICKS <= CONV_STD_LOGIC_VECTOR( 217 - 1, 14);
- when B"1000" => BAUD_CLK_TICKS <= CONV_STD_LOGIC_VECTOR( 108 - 1, 14);
- when Others => BAUD_CLK_TICKS <= CONV_STD_LOGIC_VECTOR( 868 - 1, 14);
- end case;
- end process;
复制代码
- process(Clk)
- variable baud_count : std_logic_vector(13 downto 0) := CONV_STD_LOGIC_VECTOR(868 - 1, 14);--定义为与BAUD_CLK_TICKS相同的数据类型
- begin
- if rising_edge(Clk) then
- if Reset = '1' then
- baud_rate_clk <= '0';
- baud_count := BAUD_CLK_TICKS;
- else
- if baud_count = 0 then
- baud_rate_clk <= '1';
- baud_count := BAUD_CLK_TICKS;
- else
- baud_rate_clk <= '0';
- baud_count := baud_count - 1;
- end if;
- end if;
- end if;
复制代码 Tips:这个代码软件思维偏重,硬件电路思维偏弱,资源消耗和运行速度不好,基于Xilinx FPGA的话,优化空间很大。
|
|