完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,
以下是一个COUNTER的代码,其模数可以通过MSI输入从1改为10 ...... 我已经在Virtex 4 XC4VLX160上使用Xilinx 9.1i实现了代码,输入时钟频率为125 MHz。 关于o / p频率即可获得除mod 1之外的所有模数的预期输出频率值。 对于MOD 1而言,预期频率为125 MHz,达到123.9 MHz,偏离预期值1 MHz 虽然相位延迟是可接受的,但我没有找到这种宽频率差异的理由? 这是为什么......这怎么可以纠正..... ?? 实体multi_mdc isport(ICLK:在STD_LOGIC; - 输入时钟信号MSI:在std_logic_vector(3 DOWNTO 0); --mod选择输入RST:在STD_LOGIC; --reset信号Cout:出STD_LOGIC); --counter输出信号端multi_mdc; multi_mdc的架构beh_multi_mdc是信号intop_r:STD_LOGIC;开始 - ******** ************************************************** * - 进程名称:MUL_MODCNR - 说明:此进程实现多模式的核心功能 - 通过根据外部输入生成下一个状态 - ************** ************************************************** **************** MUL_MODCNR:进程(iclk)变量vcount2:integer; 变量vcount3:整数; 变量vcount4:整数; 变量vcount5:整数; 变量vcount6:整数; 变量vcount7:整数; 变量vcount8:integer; 变量vcount9:整数; 变量vcount10:整数; 开始if(iclk ='1'和iclk'event)然后if(rst ='1')然后intop_r vcount2:= 0; vcount3:= 0; vcount4:= 0; vcount5:= 0; vcount6:= 0; vcount7:= 0; vcount8:= 0; vcount9:= 0; vcount10:= 0; 否则如果(msi =“0010”)则if(vcount2 = 0)则vcount2:= vcount2 + 1; else vcount2:= 0; 万一; 如果(vcount2 = 1)则intop_r else intop_r结束if; vcount3:= 0; vcount4:= 0; vcount5:= 0; vcount6:= 0; vcount7:= 0; vcount8:= 0; vcount9:= 0; vcount10:= 0; elsif(msi =“0011”)然后if(vcount3 vcount3:= vcount3 + 1;否则vcount3:= 1;结束if; if(vcount3 = 2)然后intop_r else intop_r end if; vcount2:= 0; vcount4:= 0 ; vcount5:= 0; vcount6:= 0; vcount7:= 0; vcount8:= 0; vcount9:= 0; vcount10:= 0; elsif(msi =“0100”)然后if(vcount4 vcount4:= vcount4 + 1; else vcount4:= 1; end if; if(vcount4 = 3)then intop_r else intop_r end if; vcount2:= 0; vcount3:= 0; vcount5:= 0; vcount6:= 0; vcount7:= 0; vcount8:= 0; vcount9:= 0; vcount10:= 0; elsif(msi =“0101”)然后if(vcount5 vcount5:= vcount5 + 1;否则vcount5:= 1;结束if; if(vcount5 = 4)然后intop_r else intop_r 结束if; vcount3:= 0; vcount4:= 0; vcount2:= 0; vcount6:= 0; vcount7:= 0; vcount8:= 0; vcount9:= 0; vcount10:= 0; elsif(msi =“0110” )然后if(vcount6 vcount6:= vcount6 + 1;否则vcount6:= 1;结束if; if(vcount6 = 5)然后intop_r else intop_r结束if; vcount3:= 0; vcount4:= 0; vcount5:= 0; vcount2 := 0; vcount7:= 0; vcount8:= 0; vcount9:= 0; vcount10:= 0; elsif(msi =“0111”)然后if(vcount7 vcount7:= vcount7 + 1;否则vcount7:= 1;结束 如果如果 (vcount7 = 6)然后intop_r else intop_r end if; vcount3:= 0; vcount4:= 0; vcount5:= 0; vcount6:= 0; vcount2:= 0; vcount8:= 0; vcount9:= 0; vcount10:= 0; elsif(msi =“1000”)然后if(vcount8 vcount8:= vcount8 + 1;否则vcount8:= 1;结束if; if(vcount8 = 7)然后intop_r else intop_r end if; vcount3:= 0; vcount4:= 0 ; vcount5:= 0; vcount6:= 0; vcount7:= 0; vcount2:= 0; vcount9:= 0; vcount10:= 0; elsif(msi =“1001”)然后if(vcount9 vcount9:= vcount9 + 1; else vcount9:= 1; end if; if(vcount9 = 8)thenIntop_r else intop_r end if; vcount3:= 0; vcount4:= 0; vcount5:= 0; vcount6:= 0; vcount7:= 0; vcount8:= 0; vcount2:= 0; vcount10:= 0; elsif(msi =“1010”)然后if(vcount10 vcount10:= vcount10 + 1;否则vcount10:= 1;结束if; if(vcount10 = 9)然后intop_r else intop_r 结束if; vcount3:= 0; vcount4:= 0; vcount5:= 0; vcount6:= 0; vcount7:= 0; vcount8:= 0; vcount9:= 0; vcount2:= 0;否则intop_r end if; end if ;结束if;结束进程MUL_MODCNR; - **************************************** **************************************** - 进程名称:输出 - 描述: 当输入为0001时,此过程实现已注册的输出和多路复用逻辑 - ****************************** ************************************************** 输出:处理(ICLK)开始,如果(RST = '0'),那么如果(MSI = “0001”),然后COUT ELSIF(iclk'event和ICLK = '1'),那么COUT END IF; 否则cout结束; 结束过程输出; 结束beh_multi_mdc; 谢谢, PRAKASH。 |
|
相关推荐
6个回答
|
|
几条评论......
a)你如何测量频率? 没有理由一分为二 产生略微不同的输出频率。 我建议你用范围看看 输入和输出信号。 b)你的时钟输出逻辑有两件事 - 它试图注册输出,也是 尝试组合输出输入时钟以除以一种情况。 混合两者 (钟表和组合)功能可能是不好的做法。 c)代码太复杂了。 它可以更简单地完成,例如(在Verilog中): reg [3:0] cnt; reg intop_r; wire tc =(cnt == 1); wire cout; always @(posedge clk)begin if(rst | tc)cnt else cnt intop_r endassign cout =(msi == 1) ? clk:intop_r; 我希望这有帮助! 约翰普罗塞纳 |
|
|
|
prakash97写道:大家好,
以下是一个COUNTER的代码,其模数可以通过MSI输入从1改为10 ...... 我已经在Virtex 4 XC4VLX160上使用Xilinx 9.1i实现了代码,输入时钟频率为125 MHz。 关于o / p频率即可获得除mod 1之外的所有模数的预期输出频率值。 对于MOD 1而言,预期频率为125 MHz,达到123.9 MHz,偏离预期值1 MHz 虽然相位延迟是可接受的,但我没有找到这种宽频率差异的理由? 这是为什么......这怎么可以纠正..... ?? entity multi_mdc isport(iclk:in std_logic; - 输入时钟信号msi:在std_logic_vector中(3 downto 0); - mod selection输入rst:in std_logic; --reset signal cout:out std_logic); - 计数器输出信号结束multi_mdc; multi_mdc的架构beh_multi_mdc是信号intop_r:std_logic; begin - ***************************** ************************************************** * - 进程名称:MUL_MODCNR - 说明:此进程实现多模式的核心功能 - 通过根据外部输入生成下一个状态 - ************** ************************************************** **************** MUL_MODCNR:进程(iclk)变量vcount2:integer; 变量vcount3:整数; 变量vcount4:整数; 变量vcount5:整数; 变量vcount6:整数; 变量vcount7:整数; 变量vcount8:integer; 变量vcount9:整数; 变量vcount10:整数; 开始if(iclk ='1'和iclk'event)然后if(rst ='1')然后intop_r vcount2:= 0; vcount3:= 0; vcount4:= 0; vcount5:= 0; vcount6:= 0; vcount7:= 0; vcount8:= 0; vcount9:= 0; vcount10:= 0; 否则如果(msi =“0010”)则if(vcount2 = 0)则vcount2:= vcount2 + 1; else vcount2:= 0; 万一; 如果(vcount2 = 1)则intop_r else intop_r结束if; vcount3:= 0; vcount4:= 0; vcount5:= 0; vcount6:= 0; vcount7:= 0; vcount8:= 0; vcount9:= 0; vcount10:= 0; elsif(msi =“0011”)然后if(vcount3 vcount3:= vcount3 + 1;否则vcount3:= 1;结束if; if(vcount3 = 2)然后intop_r else intop_r end if; vcount2:= 0; vcount4:= 0 ; vcount5:= 0; vcount6:= 0; vcount7:= 0; vcount8:= 0; vcount9:= 0; vcount10:= 0; elsif(msi =“0100”)然后if(vcount4 vcount4:= vcount4 + 1; else vcount4:= 1; end if; if(vcount4 = 3)then intop_r else intop_r end if; vcount2:= 0; vcount3:= 0; vcount5:= 0; vcount6:= 0; vcount7:= 0; vcount8:= 0; vcount9:= 0; vcount10:= 0; elsif(msi =“0101”)然后if(vcount5 vcount5:= vcount5 + 1;否则vcount5:= 1;结束if; if(vcount5 = 4)然后intop_r else intop_r 结束if; vcount3:= 0; vcount4:= 0; vcount2:= 0; vcount6:= 0; vcount7:= 0; vcount8:= 0; vcount9:= 0; vcount10:= 0; elsif(msi =“0110” )然后if(vcount6 vcount6:= vcount6 + 1;否则vcount6:= 1;结束if; if(vcount6 = 5)然后intop_r else intop_r结束if; vcount3:= 0; vcount4:= 0; vcount5:= 0; vcount2 := 0; vcount7:= 0; vcount8:= 0; vcount9:= 0; vcount10:= 0; elsif(msi =“0111”)然后if(vcount7 vcount7:= vcount7 + 1;否则vcount7:= 1;结束 如果如果 (vcount7 = 6)然后intop_r else intop_r end if; vcount3:= 0; vcount4:= 0; vcount5:= 0; vcount6:= 0; vcount2:= 0; vcount8:= 0; vcount9:= 0; vcount10:= 0; elsif(msi =“1000”)然后if(vcount8 vcount8:= vcount8 + 1;否则vcount8:= 1;结束if; if(vcount8 = 7)然后intop_r else intop_r end if; vcount3:= 0; vcount4:= 0 ; vcount5:= 0; vcount6:= 0; vcount7:= 0; vcount2:= 0; vcount9:= 0; vcount10:= 0; elsif(msi =“1001”)然后if(vcount9 vcount9:= vcount9 + 1; else vcount9:= 1; end if; if(vcount9 = 8)thenIntop_r else intop_r end if; vcount3:= 0; vcount4:= 0; vcount5:= 0; vcount6:= 0; vcount7:= 0; vcount8:= 0; vcount2:= 0; vcount10:= 0; elsif(msi =“1010”)然后if(vcount10 vcount10:= vcount10 + 1;否则vcount10:= 1;结束if; if(vcount10 = 9)然后intop_r else intop_r 结束if; vcount3:= 0; vcount4:= 0; vcount5:= 0; vcount6:= 0; vcount7:= 0; vcount8:= 0; vcount9:= 0; vcount2:= 0;否则intop_r end if; end if ;结束if;结束进程MUL_MODCNR; - **************************************** **************************************** - 进程名称:输出 - 描述: 当输入为0001时,此过程实现已注册的输出和多路复用逻辑 - ****************************** ************************************************** 输出:进程(iclk)开始if(rst ='0')然后if(msi =“0001”)然后cout elsif(iclk'event和iclk ='1')然后cout结束if; 否则cout结束; 结束过程输出; 结束beh_multi_mdc; 谢谢, PRAKASH。 你意识到你有九个32位计数器吗? 32位计数器很大。 ----------------------------是的,我这样做是为了谋生。 |
|
|
|
你好,约翰 ,
谢谢你的评论, 这是我的澄清 a)我使用过Tetronix示波器,我也测试了输入(频率)为124.99MHz,即..appox 125 MHz和输出频率。 b)我确实知道通过尝试使用数据路径缩短时钟路径,使得ROUTING sw变得最糟糕,但即便如此,我认为输出频率不应该有任何变化。 c)是的,我同意代码相当复杂,并且有足够的代码来获得正确的结果 但我主要关注的是找出频率偏差的原因,并学习 “HDL编码风格如何影响结果.....我的意思是什么,特别是在目前情况下” d)感谢你的轻量级Verilog代码。 谢谢, 普拉卡什。 |
|
|
|
|
|
|
|
有一些失真,但它显示的频率是123.9 MHz及其周期性。
|
|
|
|
你是如何测量频率的?
使用示波器的内置功能? 我从来没有 知道他们是准确的。 当您同时查看输入和输出时,如果频率不同, 你不应该把它们“锁定”在一起。 其中一个必须及时滑倒 如果它是一个较低的频率。 他们看起来锁定了吗? 约翰普罗塞纳 |
|
|
|
只有小组成员才能发言,加入小组>>
2415 浏览 7 评论
2821 浏览 4 评论
Spartan 3-AN时钟和VHDL让ISE合成时出现错误该怎么办?
2292 浏览 9 评论
3372 浏览 0 评论
如何在RTL或xilinx spartan fpga的约束文件中插入1.56ns延迟缓冲区?
2458 浏览 15 评论
有输入,但是LVDS_25的FPGA内部接收不到数据,为什么?
1079浏览 1评论
请问vc707的电源线是如何连接的,我这边可能出现了缺失元件的情况导致无法供电
579浏览 1评论
求一块XILINX开发板KC705,VC707,KC105和KCU1500
438浏览 1评论
2000浏览 0评论
723浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 04:51 , Processed in 1.276933 second(s), Total 91, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号