VHDL:在一个进程中启用多个时钟

VHDL:在一个进程中启用多个时钟,vhdl,fpga,Vhdl,Fpga,您好,我是VHDL新手,我想问一下这样的过程是否可以 在一个进程中有多个时钟 C256Hz和C4Hz是由50MHz时钟驱动的时钟启用 process (Reset, C50Mhz, Go, start_flag, C256Hz, C4Hz) begin if reset = '1' then start_flag <= '0'; elsif rising_edge (C50Mhz) then if C4Hz = '1' then if cou

您好,我是VHDL新手,我想问一下这样的过程是否可以 在一个进程中有多个时钟 C256Hz和C4Hz是由50MHz时钟驱动的时钟启用

process (Reset, C50Mhz, Go, start_flag, C256Hz, C4Hz)
  begin
  if reset = '1' then
     start_flag <= '0';
  elsif rising_edge (C50Mhz) then
     if C4Hz = '1' then
        if count4 = "11" and single_run_flag = '0' then
           start_flag <= '0';
        end if;
     end if;
   if C256Hz = '1' then
      if Go = '1' and start_flag = '0' then
          start_flag <= '1';
      end if;
   end if;
  end if;
  end process;   `
过程(复位、C50Mhz、Go、启动标志、C256Hz、C4Hz)
开始
如果重置='1',则

开始标记可以,但合成是否会产生好的结果取决于织物

灵敏度列表应该只有
重置
C50MHz
,因为这是唯一真正改变信号的事件。当
C4Hz
切换时,则
上升沿(C50MHz)
false
,因为这些值不同步,如果当时运行进程,则不会发生任何事情

可以假设单独的使能在任何地方都可用——时钟扇出非常高,以至于每个人都实现单独的时钟分配网络,因此需要在寄存器上启用。所以这是安全的使用

异步重置可能并非在所有结构上都可用,但通常是可用的。一些设备将支持异步负载(即,您可以决定重置时的值),其他设备仅支持重置(即,您可以将寄存器设置为零,初始化为一将生成一个反转表、一个重置为零的寄存器以及下一个LE中的一个逆变器)

一般来说,这是相当安全的,它可以合成为

-- intermediates
do_clear_start_flag := C4Hz = '1' and count4 = "11" and single_run_flag = '0';
do_set_start_flag := C256Hz = '1' and Go = '1' and start_flag = '0';

-- to register
enable_start_flag := do_clear_start_flag or do_set_start_flag;
new_start_flag := do_set_start_flag;
无法优化检查
do_set_start_flag
中的
start_flag
的旧值,即使设置
start_flag
在之前设置过也没有效果,因为它可能只是在当前时钟周期中重置

如果以
If C256Hz='1'
开头的块是
elsif
,则第二个中间块将读取

do_set_start_flag := C256Hz = '1' and Go = '1' and do_clear_start_flag = '0'

多个时钟启用是可以的,只要只有一个时钟(有)。只需删除除时钟(C50MHz)之外的所有内容,并从杂乱的灵敏度列表中重置。C4Hz
看起来如何?这是一个4 Hz的矩形,占空比为50%吗?