Vhdl 将输入时钟驱动到输出
我有一个模块,有一个8位输入和一个串行输出,我想序列化输入数据,并将其与时钟同步 我想在下降沿设置数据,然后在时钟上升时等待,当时钟再次下降时,我设置另一个数据。我不想将直接参考时钟连接到输出,因为当我不使用此模块时,我希望时钟输出为1状态 我尝试过以下代码:Vhdl 将输入时钟驱动到输出,vhdl,clock,fpga,Vhdl,Clock,Fpga,我有一个模块,有一个8位输入和一个串行输出,我想序列化输入数据,并将其与时钟同步 我想在下降沿设置数据,然后在时钟上升时等待,当时钟再次下降时,我设置另一个数据。我不想将直接参考时钟连接到输出,因为当我不使用此模块时,我希望时钟输出为1状态 我尝试过以下代码: process(Clock, ModuleReset) begin if ModuleReset = '0' then OutData <= '0'; OutC
process(Clock, ModuleReset)
begin
if ModuleReset = '0' then
OutData <= '0';
OutCK <= '0';
counter <= 7;
elsif falling_edge(Clock) then
OutCK <= '0';
OutData <= Data(counter);
elsif rising_edge(Clock) then
OutCK <= '1';
end if;
end process;
进程(时钟、模块设置)
开始
如果ModuleReset='0',则
OutData尝试的问题确实是,对于同一个信号,您有多个驱动器,或者您在时钟的上升沿和下降沿上分配了一个信号。这是不可合成的
试试这个:
process(Clock, ModuleReset, ModuleEN)
begin
if ModuleEN = '1' then
OutCK <= Clock;
else
OutCK <= '1';
end if;
if ModuleReset = '0' then
OutData <= '0';
counter <= 7;
elsif falling_edge(Clock) then
OutData <= Data(counter);
end if;
end process;
进程(时钟、模块设置、模块设置)
开始
如果ModuleEN='1',则
OutCK您尝试的问题确实是,对于同一个信号,您有多个驱动器,或者您在时钟的上升沿和下降沿上分配了一个信号。这是不可合成的
试试这个:
process(Clock, ModuleReset, ModuleEN)
begin
if ModuleEN = '1' then
OutCK <= Clock;
else
OutCK <= '1';
end if;
if ModuleReset = '0' then
OutData <= '0';
counter <= 7;
elsif falling_edge(Clock) then
OutData <= Data(counter);
end if;
end process;
进程(时钟、模块设置、模块设置)
开始
如果ModuleEN='1',则
OutCK据我所知,你的最后一个想法最终为你所用,是次优的。如果你的钟慢了,应该没问题,但我建议你还是把它修好
if ModuleEN = '1' then
OutCK <= Clock;
else
OutCK <= '1';
end if;
如果ModuleEN='1',则
OutCK据我所知,你的最后一个想法最终为你所用,是次优的。如果你的钟慢了,应该没问题,但我建议你还是把它修好
if ModuleEN = '1' then
OutCK <= Clock;
else
OutCK <= '1';
end if;
如果ModuleEN='1',则
我解决了,最后一个代码成功了。我解决了,最后一个代码成功了。从第一条错误消息来看,这似乎是使用Synplify Pro合成的。使用硬DDR IO寄存器是一种特定于平台的优化。在支持它的FPGA平台上,这是一个有用的优化。但它使设计平台具体化,在没有DDR IO的FPGA或ASIC上,它不是正确的解决方案。带组合逻辑的门控时钟解决方案与平台无关,是ASIC的正确解决方案,在高达150MHz左右的FPGA中工作良好。因此,哪种解决方案最“正确”在很大程度上取决于应用程序的需要。从第一条错误消息来看,这似乎是使用Synplify Pro合成的。使用硬DDR IO寄存器是一种特定于平台的优化。在支持它的FPGA平台上,这是一个有用的优化。但它使设计平台具体化,在没有DDR IO的FPGA或ASIC上,它不是正确的解决方案。带组合逻辑的门控时钟解决方案与平台无关,是ASIC的正确解决方案,在高达150MHz左右的FPGA中工作良好。因此,哪种解决方案最“正确”在很大程度上取决于应用程序的需求。