Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vhdl 门控时钟警告_Vhdl - Fatal编程技术网

Vhdl 门控时钟警告

Vhdl 门控时钟警告,vhdl,Vhdl,我对涉及VHDL物理描述代码的所有内容都是新手,我有一个大学项目要完成(Nexys2或Nexys3板上有四个不同的文本动画),我不断收到以下警告消息: 警告:Xst:737-找到信号的7位锁存器。锁存可能由不完整的case或if语句生成。我们不建议在FPGA/CPLD设计中使用锁存器,因为它们可能会导致时序问题。 警告:Xst:737-找到信号的7位锁存器。锁存可能由不完整的case或if语句生成。我们不建议在FPGA/CPLD设计中使用锁存器,因为它们可能会导致时序问题。 警告:Xst:737

我对涉及VHDL物理描述代码的所有内容都是新手,我有一个大学项目要完成(Nexys2或Nexys3板上有四个不同的文本动画),我不断收到以下警告消息:

警告:Xst:737-找到信号的7位锁存器。锁存可能由不完整的case或if语句生成。我们不建议在FPGA/CPLD设计中使用锁存器,因为它们可能会导致时序问题。
警告:Xst:737-找到信号的7位锁存器。锁存可能由不完整的case或if语句生成。我们不建议在FPGA/CPLD设计中使用锁存器,因为它们可能会导致时序问题。
警告:Xst:737-找到信号的7位锁存器。锁存可能由不完整的case或if语句生成。我们不建议在FPGA/CPLD设计中使用锁存器,因为它们可能会导致时序问题。
警告:Xst:737-找到信号的7位锁存器。锁存可能由不完整的case或if语句生成。我们不建议在FPGA/CPLD设计中使用锁存器,因为它们可能会导致时序问题。
警告:PhysDesignRules:372-门控时钟。时钟网络temp_reg1_not0001由一个组合管脚提供。这不是好的设计实践。使用CE引脚控制向触发器加载数据。
警告:PhysDesignRules:372-门控时钟。时钟网络temp_reg3_not0001由组合管脚提供。这不是好的设计实践。使用CE引脚控制向触发器加载数据。
警告:PhysDesignRules:372-门控时钟。时钟网络temp_reg2_not0001由组合管脚提供。这不是好的设计实践。使用CE引脚控制向触发器加载数据。
警告:PhysDesignRules:372-门控时钟。时钟网络temp_reg4_not0001由组合管脚提供。这不是好的设计实践。使用CE引脚控制将数据加载到触发器中

这里是所有源文件的链接(我在Ise Design Suite 14.7中工作)

编辑:不幸的是,我已经花了将近半天的时间,仍然无法准确指出问题所在。 我只能非常粗略地说,虽然它是在下面的代码(第73行和后面的代码)的过程中

IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
--Folosim mai jos pachetul nostru
使用work.Constante_si_component.all;
实体选项1为
港口(
时钟50米:标准逻辑;
复位:在标准逻辑中;
catozi:输出标准逻辑向量(0到6);
anozi:输出标准逻辑向量(0到3);
opt1、opt2、opt3、opt4:标准逻辑中);
终端实体;
Optiune1的架构是
--Instantierea semnalelor区域设置
信号本地时钟1Hz:标准逻辑;
信号本地时钟1Khz:标准逻辑;
信号adresa:从0到nr_cuvinte_distincte-1的整数范围;
信号sec_4:整数范围0到limita_sup:=0;——努马拉精确5秒
信号量:标准逻辑向量(lungime_cuvinte-1下降至0);
信号reg1、reg2、reg3、reg4:std_逻辑_向量(0到6):=(其他=>'0');
信号temp_reg1、temp_reg2、temp_reg3、temp_reg4:std_逻辑_向量(0到6):=(其他=>0');
--声明成分
组件ROM
端口(地址:在0到nr_cuvinte_distincte-1的整数范围内;
数据:输出标准逻辑向量(lungime_cuvinte-1下降到0);
端部元件ROM;
分量式数字振荡器
端口(复位:在std_逻辑中;
clk:标准逻辑中;
limita_numarare:整数形式;
计数:从0到limita_sup)的整数范围;
端部元件;
组件注册表
端口(时钟1Hz:标准逻辑中;
复位:在标准逻辑中;
写入模式:标准逻辑;
输入:标准逻辑向量(0到6);
输出:输出标准逻辑向量(0到6);
端部元件;
分量法
端口(时钟1KHz:标准逻辑中;
reg1,reg2,reg3,reg4:标准逻辑向量(0到6);
catozi:输出标准逻辑向量(0到6);
b:输出标准逻辑向量(0到3);
端部元件;
开始
--接触的实例
公司时钟:分频器端口图(时钟50M=>时钟50M,复位=>复位,时钟1Hz=>本地时钟1Hz,时钟1KHz=>本地时钟1KHz);
--努马拉托鲁尔实例
Numarator_1:Numarator端口图(复位=>reset,时钟=>local_clk_1Hz,限制时间=>nr_cuvinte_distincte-1,计数=>adresa);
Numarator_2:Numarator端口映射(重置=>reset,clk=>local_clk_1Hz,limita_numarare=>4,计数=>sec_4);
--瞬间记忆
存储器1:ROM端口图(地址=>adresa,数据=>cuvant);
--实例寄存器
寄存器1:寄存器端口映射(本地时钟1Hz,复位'1',临时寄存器1,寄存器1);
寄存器2:寄存器端口映射(本地时钟1Hz,复位'1',临时寄存器2,寄存器2);
寄存器3:寄存器端口映射(本地时钟1Hz,复位'1',临时寄存器3,寄存器3);
寄存器4:寄存器端口映射(本地时钟1Hz,复位'1',临时寄存器4,寄存器4);
--瞬时刷新率ul de la anozi
刷新率:RRate端口图(本地时钟1KHz、reg1、reg2、reg3、reg4、catozi、anozi);
过程(opt1、opt2、opt3、opt4、本地时钟1Hz、温度调节1、温度调节2、温度调节3、温度调节4、cuvant、第4节)
开始
如果(opt1='1')和(opt2='0')和(opt3='0')和(opt4='0')和(本地时钟频率='1'),则
临时条例1
正如David Koontz指出的,该代码负责锁存:

if sec_4 = 0 then 
    temp_reg1 <= cuvant;
elsif sec_4 = 1 then            
    temp_reg2 <= cuvant;
    temp_reg1<="1111111";
elsif sec_4 = 2 then
    temp_reg3 <= cuvant;
    temp_reg2<="1111111";
elsif sec_4 = 3 then
temp_reg4 <= cuvant;
temp_reg3<="1111111";
elsif sec_4 = 4 then
   temp_reg1 <= "1111111"; 
   temp_reg2 <= "1111111";
   temp_reg3 <= "1111111";
   temp_reg4 <= "1111111";
end if;
如果sec_4=0,则

翻译所有罗马尼亚名称和注释后,注意到
temp_reg1
-
temp_reg4
是寄存器的输入,似乎您没有打算锁定

无意中推断的锁存是由于缺乏完整的条件分配覆盖,并且无法保证组合时钟(或锁存启用)是无故障的,这是由于目标设备中不同数量的“门”等价物的延迟差异、“线”延迟(由于放置和上升和下降时间的差异)。防止锁存需要在case语句中的每个条件或选择下进行赋值,ess
process(opt1, opt2, opt3, opt4, local_clk_1Hz, temp_reg1, temp_reg2, temp_reg3, temp_reg4, cuvant, sec_4) 
begin
    if(opt1='1')and(opt2='0')and(opt3='0')and(opt4='0')and(local_clk_1Hz='1') then     
        temp_reg1 <= cuvant;
        temp_reg2 <= temp_reg1;
        temp_reg3 <= temp_reg2;
        temp_reg4 <= temp_reg3; 
temp_reg1 <= cuvant;
temp_reg2 <= reg1;
temp_reg3 <= reg2;
temp_reg4 <= reg3;
if sec_4 = 0 then 
    temp_reg1 <= cuvant;
elsif sec_4 = 1 then            
    temp_reg2 <= cuvant;
    temp_reg1<="1111111";
elsif sec_4 = 2 then
    temp_reg3 <= cuvant;
    temp_reg2<="1111111";
elsif sec_4 = 3 then
temp_reg4 <= cuvant;
temp_reg3<="1111111";
elsif sec_4 = 4 then
   temp_reg1 <= "1111111"; 
   temp_reg2 <= "1111111";
   temp_reg3 <= "1111111";
   temp_reg4 <= "1111111";
end if;
-- added declarations

    component divizor is
        port (
            clk_50M:    in  std_logic;
            reset:      in  std_logic;
            clk_1Hz:    out std_logic;
            clk_1KHz:   out std_logic
        ) ;
    end component;

    signal some_cond0:     std_logic;
    signal some_cond1:     std_logic;
    signal some_cond2:     std_logic;
    signal some_cond3:     std_logic;

begin
-- new concurrent signal assignment statements:

    some_cond0 <= opt1 and not opt2 and not opt3 and not opt4 and local_clk_1Hz;

    some_cond1 <= not opt1 and opt2 and not opt3 and not opt4 and local_clk_1Hz;

    some_cond2 <= not opt1 and not opt2 and opt3 and not opt4 and local_clk_1Hz;

    some_cond3 <= not opt1 and not opt2 and not opt3 and opt4 and local_clk_1Hz;
MUX1: 
    temp_reg1 <= cuvant    when  some_cond0 = '1' else
                 temp_reg2 when  some_cond1 = '1' else 
                 cuvant    when  (some_cond2 = '1' or some_cond3 = '1') and
                                 sec_4 < 4                                 else
                 "1111111" when (some_cond2 = '1' or some_cond3 = '1')  and
                                 sec_4 = 4                                 else
                 (others => '0');
MUX2:                
    temp_reg2 <= temp_reg1 when  some_cond0 = '1' else
                 temp_reg3 when  some_cond1 = '1' else 
                 cuvant    when  (some_cond2 = '1' or some_cond3 = '1') and
                                 sec_4 < 4                                 else
                 "1111111" when (some_cond2 = '1' or some_cond3 = '1')  and
                                 sec_4 = 4                                 else
                 (others => '0');
MUX3:                
     temp_reg3 <= temp_reg2 when  some_cond0 = '1' else
                  temp_reg4 when  some_cond1 = '1' else 
                  cuvant    when  (some_cond2 = '1' or some_cond3 = '1') and
                                  sec_4 < 4                                 else
                  "1111111" when (some_cond2 = '1' or some_cond3 = '1')  and
                                  sec_4 = 4                                 else
                  (others => '0');  
MUX4:                 
    temp_reg4 <= temp_reg3 when  some_cond0 = '1' else
                 cuvant    when  some_cond1 = '1' else 
                 cuvant    when  (some_cond2 = '1' or some_cond3 = '1') and
                                  sec_4 < 4                                 else
                 "1111111" when (some_cond2 = '1' or some_cond3 = '1')  and
                                  sec_4 = 4                                 else
                 (others => '0');    
signal inter: integer; -- acest semnal chiar e intermediar fiindca nu prea