完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
大家下午好,
我忙着使用UART进行RS485通信,现在我已达到4Mbit / s的速度。 这不是我想达到的目的。 现在,在执行Place&amp;路线后,我有一个“过度倾斜因为”警告。 但是在“因为”之后我没有看到任何理由让我非常沮丧:) 我得到的完整警告如下: 警告:路由:455 - CLK Net:UART / TRANSMITTER / BaudClk可能有过度偏斜,因为 现在我想在我修复此警告后,它还可以帮助我获得更好的时钟信号,这样我最终可以达到更快的速度。 我将在下面的代码中发布生成baudClock的代码。 我希望有人能指出我正确的方向。 常量DIV:整数:= ClockFreq / BaudRate;常量HALFDIV:整数:= DIV / 2; BaudGen:进程(clk,reset)开始if(reset ='1')然后 - Reset Switch cval BaudClk elsif rising_edge(Clk)然后cval if(cval = HALFDIV)然后BaudClk cval结束if; 万一; 结束过程BaudGen; 现在我只有另一个进程,它可以在BaudClk的rising_edge上工作,我有一个状态机来创建startbit,data和stop bit。 那么有人能指出我的BaudClk生成器出错的方向吗? 提前致谢, 罗埃尔 以上来自于谷歌翻译 以下为原文 Good Afternoon Everyone, Im busy with a UART for a RS485 communication, unop now i reached speeds of like 4Mbit/s. This is not what i want to reach in the end. Now i have a "excessive skew because" warning after executing the Place&route. But i dont see any reason after the "Because" which fustrates me a lot :) The full warning i get is the following: WARNING:Route:455 - CLK Net:UART/TRANSMITTER/BaudClk may have excessive skew because Now i think after i fix this warning, it would also help me to get a better clock signal, so i can reach faster spedes eventually. I will post the code below where the baudClock is being generated. And i hope someone can give me a point in the right direction. constant DIV : integer := ClockFreq / BaudRate; constant HALFDIV : integer := DIV / 2; BaudGen : process (clk,reset) begin if (reset = '1') then -- Reset Switch cval <= 0; BaudClk <= '0'; elsif rising_edge(Clk) then cval <= cval + 1; if (cval = HALFDIV) then BaudClk <= not BaudClk; cval <= 0; end if; end if; end process BaudGen; Now i only have another process wich works on the rising_edge of the BaudClkwhere i have a state machine to create the startbit, data and stop bit. So can someone point me in the correct direction on what is going wrong in my BaudClk generator ? Thanks in advance, Roel |
|
相关推荐
5个回答
|
|
BUFG是一个设备原语,因此不需要显式组件声明。
但是,为了使工具正确地拾取它,您需要在VHDL中声明UNISIM库,如下所示: 图书馆UNISIM;使用UNISIM.vcomponents.all; 所以使用它而不是声明组件。 我承认我个人不喜欢派生结构时钟,即使在输出上有全局缓冲器,但是,如果它适用于你并且你没有性能问题,那么很好。 ----------“我们必须学会做的事情,我们从实践中学习。” - 亚里士多德 在原帖中查看解决方案 以上来自于谷歌翻译 以下为原文 BUFG is a device primitive and, as such, doesn't need explicit component declaration. However, in order for the tools to pick it up correctly, you need to have the UNISIM library declared in your VHDL, like this: Library UNISIM; use UNISIM.vcomponents.all; So use that rather than declaring the component. I will admit that I personally don't like deriving fabric clocks, even with a global buffer on the output but, if it works for you and you have no performance issues, then great. ---------- "That which we must learn to do, we learn by doing." - AristotleView solution in original post |
|
|
|
首先阅读PAR报告以获取完整的错误消息。
其次,您在结构逻辑中创建BaudClk,但尝试将其用作时钟网络。 这种有效的时钟分割从根本上说是不好的做法。 有两种方法: 1.使用结构逻辑计数器划分系统时钟,以波特率创建时钟使能,以用于由系统时钟提供时钟的其他进程。 2.将BaudClk连接到BUFG,然后再将其用于其他逻辑。 这将改善时序问题,但不能完全删除它们,因为源时钟仍由FF生成。 对于您运行的频率,可能没问题。 问候, 霍华德 ----------“我们必须学会做的事情,我们从实践中学习。” - 亚里士多德 以上来自于谷歌翻译 以下为原文 Firstly read the PAR report for the full error message. Secondly, you create the BaudClk in fabric logic but try to use it as a clock net. This effective clock division is fundamentally bad practice. There are two ways around this: 1. Use a fabric logic counter to divide your system clock to create a clock enable, at the baud rate, to use on other processes that are clocked by the system clock. 2. Connect the BaudClk to a BUFG before using it on other logic. This will improve the timing issues but not remove them completely because the source clock is still being generated by FFs. For the frequencies your are running at, it may be OK. Regards, Howard ---------- "That which we must learn to do, we learn by doing." - Aristotle |
|
|
|
霍华德,这帮了很多忙。
感谢您的回答。 我为我生成的BaudClk创建了一个BUFG。 我现在已经可以达到更高的速度了。 现在我不确定我是否创造了100%正确的BUFG。 我在我的代码中使用了以下内容: 组件BUFG 港口 ( 我:在std_logic; O:out std_logic ); BUFG_inst:BUFG 港口地图( O => BaudClkOut, 我=> BaudClk ); 所以我在其他过程中使用BaudClkOut,这非常有效。 但是我得到了关于它的警告说: “设置黑匣子模块。” 现在我不知道我是否应该忽略这一点,因为它似乎工作得很完美,没有任何歪斜,速度更好。 也许你对我也有这个答案。 我赞赏你的帮助。 问候, 罗埃尔 以上来自于谷歌翻译 以下为原文 Howard, This helped a lot. Thanks for your answer. I created a BUFG for the BaudClk i generated. I already can reach a much higher speed now. Now i am not sure if i created the BUFG 100% correct. I Used the following in my code: Component BUFG port ( I : in std_logic; O: out std_logic ); BUFG_inst : BUFG port map( O => BaudClkOut, I => BaudClk ); So i use BaudClkOut in the other processes, this works perfect. But i get the warning about it which says: " Instatiating black box module Now i dont know if i should just ignore this because it seems like it is working perfect, Nothing on skew anymore and speed is a lot better. Maybe u also have an answer for this for me. I appriciate your help. Regards, Roel |
|
|
|
BUFG是一个设备原语,因此不需要显式组件声明。
但是,为了使工具正确地拾取它,您需要在VHDL中声明UNISIM库,如下所示: 图书馆UNISIM;使用UNISIM.vcomponents.all; 所以使用它而不是声明组件。 我承认我个人不喜欢派生结构时钟,即使在输出上有全局缓冲器,但是,如果它适用于你并且你没有性能问题,那么很好。 ----------“我们必须学会做的事情,我们从实践中学习。” - 亚里士多德 以上来自于谷歌翻译 以下为原文 BUFG is a device primitive and, as such, doesn't need explicit component declaration. However, in order for the tools to pick it up correctly, you need to have the UNISIM library declared in your VHDL, like this: Library UNISIM; use UNISIM.vcomponents.all; So use that rather than declaring the component. I will admit that I personally don't like deriving fabric clocks, even with a global buffer on the output but, if it works for you and you have no performance issues, then great. ---------- "That which we must learn to do, we learn by doing." - Aristotle |
|
|
|
是的,这修复了我的警告。
直到现在这仍然可以正常工作,使用DCM以12Mbit运行,将我的50MHZ时钟乘以2。 我遇到一些问题达到更高的速度,但我可能需要调整我的过采样一点点。 如果这不能解决我的问题,我将尝试使用baudenable选项。 非常感谢你的帮助 :) 以上来自于谷歌翻译 以下为原文 Yes this fixed my warning. Untill now this still works ok, running at 12Mbit with a DCM to multiply my 50MHZ clock by 2. I get some problems reaching higher speeds, but i might need to adjust my oversampling a little bit. If This does not fix my problem i will try option one with the baudenable. Thanks alot for your help :) |
|
|
|
只有小组成员才能发言,加入小组>>
2423 浏览 7 评论
2824 浏览 4 评论
Spartan 3-AN时钟和VHDL让ISE合成时出现错误该怎么办?
2294 浏览 9 评论
3374 浏览 0 评论
如何在RTL或xilinx spartan fpga的约束文件中插入1.56ns延迟缓冲区?
2465 浏览 15 评论
有输入,但是LVDS_25的FPGA内部接收不到数据,为什么?
1194浏览 1评论
请问vc707的电源线是如何连接的,我这边可能出现了缺失元件的情况导致无法供电
590浏览 1评论
求一块XILINX开发板KC705,VC707,KC105和KCU1500
452浏览 1评论
2006浏览 0评论
731浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 11:25 , Processed in 1.575662 second(s), Total 86, Slave 70 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号