赛灵思
直播中

杨月粉

7年用户 222经验值
私信 关注
[问答]

Spartan-6 FPGA生成编程文件时的两个警告是什么意思?

你好,
我有一个Spartan-6 FPGA,我将它用于音频应用设计。
当我在ISE中合成并实现设计时,没有警告或错误。
但是,当我运行“生成编程文件”时,有两个警告我不明白:
警告:PhysDesignRules:372 - 门控时钟。
时钟网
I2S_converter_s2p_1 / I2S_demux_1 / l_tick由组合引脚提供。
这不是好的设计实践。
使用CE引脚控制负载
数据进入触发器。
警告:PhysDesignRules:372 - 门控时钟。
时钟网
I2S_converter_s2p_1 / I2S_demux_1 / r_tick由组合引脚提供。
这不是好的设计实践。
使用CE引脚控制负载
数据进入触发器。
在设计中,我以下列方式创建一个滴答信号:
--bit_clk计数器寄存器
进程(bit_clk,reset,go_signal)
开始
if(reset ='1')然后
r_reg_bit'0');
elsif(bit_clk'event和bit_clk ='0'和go_signal ='1')然后
r_reg_bit:
r_tick:
进程(reset,lr_clk,l_tick,data_p,r_reg_l)
开始
如果reset ='1'那么
r_reg_l'0');
elsif(l_tick'event和l_tick ='1')然后
r_reg_l?
谢谢。

回帖(6)

张晓宁

2019-8-2 09:17:07
我不是VHDL用户,但我已经看到足够的VHDL代码来询问以下问题。
joelby写道:
要避免错误,请使用r_tick作为时钟使能而不是时钟:
处理(lr_clk)
开始 
if(reset ='1')然后 
r_reg_r'0'); 
elsif(r_tick ='1')然后 
r_reg_r 
万一;
结束过程;
请注意,您可能需要确保r_tick仅在单个lr_clk周期内很高才能实现相同的行为。
我相信(请纠正我,如果我错了)正面触发的D寄存器与同步复位和时钟使能的正确推断如下:
处理(lr_clk)
开始 
if(rising_edge(lr_clk))然后 
if(reset ='1')然后 
r_reg_r'0'); 
elsif(r_tick ='1')然后 
r_reg_r 
万一; 
万一;
结束过程;
关于joelby写的其他一切,我同意他的分析和建议。
此外,对于用户9758327,请注意,时钟进程不应包括除过程灵敏度列表中的时钟和(如果使用)异步设置/重置之外的任何内容。
- 鲍勃埃尔金德
签名:新手的自述文件在这里:http://forums.xilinx.com/t5/New-Users-Forum/README-first-Help-for-new-users/td-p/219369总结:1。
阅读手册或用户指南。
你读过手册了吗?
你能找到手册吗?2。
搜索论坛(并搜索网页)以寻找类似的主题。
不要在多个论坛上发布相同的问题。
不要在别人的主题上发布新主题或问题,开始新的主题!5。
学生:复制代码与学习设计不同.6“它不起作用”不是一个可以回答的问题。
提供有用的详细信息(请与网页,数据表链接).7。
您的代码中的评论不需要支付额外费用。
我没有支付论坛帖子的费用。
如果我写一篇好文章,那么我一无所获。
在原帖中查看解决方案
举报

刘瑞

2019-8-2 09:34:00
这些错误是相当不言自明的:
警告:PhysDesignRules:372 - 门控时钟。
时钟网 
I2S_converter_s2p_1 / I2S_demux_1 / r_tick由组合引脚提供。 
这不是好的设计实践。
使用CE引脚控制负载 
数据进入触发器。
然后在这个勾号中我创建两个单独的刻度:
r_tick
l_tick用于人字拖:
进程(reset,lr_clk,r_tick,data_p,r_reg_r)
开始 
如果reset ='1'那么
r_reg_r'0'); 
elsif(r_tick'event和r_tick ='1')然后
r_reg_r
要避免错误,请使用r_tick作为时钟使能而不是时钟:
处理(lr_clk)
开始 
if(reset ='1')然后 
r_reg_r'0'); 
elsif(r_tick ='1')然后 

r_reg_r
举报

张晓宁

2019-8-2 09:42:24
我不是VHDL用户,但我已经看到足够的VHDL代码来询问以下问题。
joelby写道:
要避免错误,请使用r_tick作为时钟使能而不是时钟:
处理(lr_clk)
开始 
if(reset ='1')然后 
r_reg_r'0'); 
elsif(r_tick ='1')然后 
r_reg_r 
万一;
结束过程;
请注意,您可能需要确保r_tick仅在单个lr_clk周期内很高才能实现相同的行为。
我相信(请纠正我,如果我错了)正面触发的D寄存器与同步复位和时钟使能的正确推断如下:
处理(lr_clk)
开始 
if(rising_edge(lr_clk))然后 
if(reset ='1')然后 
r_reg_r'0'); 
elsif(r_tick ='1')然后 
r_reg_r 
万一; 
万一;
结束过程;
关于joelby写的其他一切,我同意他的分析和建议。
此外,对于用户9758327,请注意,时钟进程不应包括除过程灵敏度列表中的时钟和(如果使用)异步设置/重置之外的任何内容。
- 鲍勃埃尔金德
签名:新手的自述文件在这里:http://forums.xilinx.com/t5/New-Users-Forum/README-first-Help-for-new-users/td-p/219369总结:1。
阅读手册或用户指南。
你读过手册了吗?
你能找到手册吗?2。
搜索论坛(并搜索网页)以寻找类似的主题。
不要在多个论坛上发布相同的问题。
不要在别人的主题上发布新主题或问题,开始新的主题!5。
学生:复制代码与学习设计不同.6“它不起作用”不是一个可以回答的问题。
提供有用的详细信息(请与网页,数据表链接).7。
您的代码中的评论不需要支付额外费用。
我没有支付论坛帖子的费用。
如果我写一篇好文章,那么我一无所获。
举报

刘瑞

2019-8-2 09:58:06
谢谢鲍勃!
我对学习VHDL缺乏兴趣显示:)
举报

更多回帖

发帖
×
20
完善资料,
赚取积分