Vhdl 将输入时钟驱动到输出

Vhdl 将输入时钟驱动到输出,vhdl,clock,fpga,Vhdl,Clock,Fpga,我有一个模块,有一个8位输入和一个串行输出,我想序列化输入数据,并将其与时钟同步 我想在下降沿设置数据,然后在时钟上升时等待,当时钟再次下降时,我设置另一个数据。我不想将直接参考时钟连接到输出,因为当我不使用此模块时,我希望时钟输出为1状态 我尝试过以下代码: process(Clock, ModuleReset) begin if ModuleReset = '0' then OutData <= '0'; OutC

我有一个模块,有一个8位输入和一个串行输出,我想序列化输入数据,并将其与时钟同步

我想在下降沿设置数据,然后在时钟上升时等待,当时钟再次下降时,我设置另一个数据。我不想将直接参考时钟连接到输出,因为当我不使用此模块时,我希望时钟输出为1状态

我尝试过以下代码:

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中工作良好。因此,哪种解决方案最“正确”在很大程度上取决于应用程序的需求。