[资料分享] VHDL分频

wenhuawu   2009-3-13 11:30 楼主
我的晶振是50M的,用PLL分过后也还有10M,我现在要做时钟,即得到1HZ的信号 ,那个难呀,写了几个PROCESS,分了三次,才得到了不太标准的1HZ信号,有没有朋友知道怎么分才能得到标准的1HZ信号呢?还有就是VHDL里的integer类型的数据有没有上限,数据太大了,有性能影响没有?
科技应该让生活变得更简单!

回复评论 (15)

Re: [讨论] VHDL分频

没抗清楚是讨教帖子就闯进来了:Q
点赞  2009-3-14 14:10

从实际问题出发可能会好点?

我的理解是,首先重要的是对问题的分析,得到合适的处理思路,再进行具体的编程过程,可能会清晰得多。
因此建议从下面很简单的关系出发展开设计(与这里的讨论):
10,000,000 = 10^7 = 2^7 x  5^7
点赞  2009-4-1 15:47

Re: [讨论] VHDL分频

楼上的能说清楚一点吗
点赞  2009-4-2 16:50
引用: 原帖由 heningbo 于 2009-4-2 16:50 发表
楼上的能说清楚一点吗

对不起,说的简单了些。下面多说些,请予指正。

包括这个主题在内的很多帖子中存在一个共性的问题,就是遇到问题,不是先去具体准确地分析问题本身,而是一下子就扎到工具(例如Verilog等)里面,试图在其中得到解决的结果;殊不知工具(软件)虽然很重要,也会占用你绝大部分工作时间,但它仅仅是工具而已,工具的正确运用依赖于我们对问题的理解和合理的思维(解题)路线。从工程学的角度看,EDA中数字系统或者电路设计中的对象认识,与软件工程中的“需求分析”一样,占有决定成败的举足轻重地位。

从主题作者的描述:“ 了几个PROCESS,分了次,才得到了不太标准的1HZ信号”,可以看出,作者没有认真思考这个课题本身,而是“工具优先”了。
问题本身很简单,就是分频比等于10^7,把这个分频比做一下分解,就可以知道,可以由七个二进分频和七个五(8-3)分频串接实现。可以得到准确“标准”的1Hz信号。可见作者忽略了他肯定了解的那些简单但特别关键的步骤--对象分析。

分频模块分频比的确定是非常灵活的,特别是那些非2^n的分频链。这里给出的自然也就不是唯一的解决方案。此外不同分频比的分频模块的串接顺序安排上就要根据具体情况安排,例如速度、频率以及相位、占空比要求等等。还是那句话:工程问题总是具体的。

[ 本帖最后由 xiaoxif 于 2009-4-2 22:46 编辑 ]
点赞  2009-4-2 22:44

Re: [讨论] VHDL分频

为什么要“由七个二进分频和七个五(8-3)分频串接实现”呢?
我看一般的书上这样写啊
两者优劣呢?
second:process(clk,reset)     --此进程产生一个持续时间为一秒的的闸门信号
begin
  if reset='1' then k_1hz<=0;
  elsif clk'event and clk='1' then
     if k_1hz<49999999 then k_1hz<=k_1hz+1;
     else k_1hz<=50000000;
     end if;
  end if;
  if k_1hz<49999999 and  reset='0' then en<='1';
  else en<='0';
  end if;
end process;
我是初学者,什么都不懂
请赐教
点赞  2009-4-7 14:33

Re: [讨论] VHDL分频

上面的写错了
请看下面的分频

process(clk)                                         --分频器;
variable cnt : integer range 0 to 50000;
begin
   if clk'event and clk='1' then cnt:=cnt+1;
      if cnt<2500 then clk_shift<='1';
        elsif cnt<50000 then clk_shift<='0';
        else cnt:=0;clk_shift<='0';
        end if;
   end if;
end process;
点赞  2009-4-7 14:34
谢谢你的问题,几年前使用Verilog都忘了,对VHDL更不熟悉,岁数大更笨,只好说点心得,错了请指教:

首先,所谓10^7的提法是针对原来主题中,特别是从“分了三次,才得到了不太标准的1HZ信号”这句话,着力处,不在题目本身,而是解决问题的思路。具体观点,不再赘叙。

第二,HDL(其实也包括其他领域)的对象描述,在不同抽象层次上存在着很大差异。就具体方法而言,每个工程师也会(也应该)根据课题要求特点和每个人的情况,有所侧重地寻求适合自己情况和更加切题的解决形式:更靠近软件的行为描述,更贴近硬件的(低级)的侧重结构的描述。为此好像没有什么更多值得争论的必要。

以下说说具体问题:
如果我理解的正确,你的这个设计是一个响应时钟上升沿,分频比为50000、占空比为5%的一个分频器。如果这个判断是正确的,那么稍加调整和扩展就可以实现楼主提出的时钟=10MHz,分频比=10^7的方案了。
重复一下:在保证正确分频比的前提下,大比值非2^n分频链设计是相当灵活的,因此2^7×5^7的链只是方法之一,而且是贴近硬件的结构风格的描述。长链的这种多可能的组态为考虑实际需要(特殊的波形要求,不同的相位处理等)与可能(例如,速度等)提供了许多方便。
这里重复一个需要说,但也是大家非常清楚的罗嗦话:任何N分频器,都源自2^m 的二进分频器。

以图的形式附上学习你这段编程的体会,请指点。




[ 本帖最后由 xiaoxif 于 2009-4-8 04:08 编辑 ]
  • Process_CLK1.JPG
点赞  2009-4-8 03:45

关于整型数上限的补充

再补充一点:关于整数的上限问题,作为一种语言肯定是存在上限的,但是VHDL好像没有做出标准性的规定,可能不同公司工具产品之间会有所不同。如果按照此前七楼给出的方案,估计这个上限值应当能满足你的设计需要。

[ 本帖最后由 xiaoxif 于 2009-4-8 17:26 编辑 ]
点赞  2009-4-8 04:02

回复 8楼 xiaoxif 的帖子

谢谢你的回复,确实是我没有自己用心分析问题的本质,和用已有技术来解决未知问题,以后一定改正。你画的示意图太形象了,向你学习。
科技应该让生活变得更简单!
点赞  2009-4-8 08:01

Re: [讨论] VHDL分频

谢谢xiaoxif
太厉害了
向你学习
点赞  2009-4-8 09:09

Re: [讨论] VHDL分频

学习了,很不错,谢谢分享
点赞  2009-4-10 09:43
引用: 原帖由 xiaoxif 于 2009-4-8 04:02 发表
再补充一点:关于整数的上限问题,作为一种语言肯定是存在上限的,但是VHDL好像没有做出标准性的规定,可能不同公司工具产品之间会有所不同。如果按照此前七楼给出的方案,估计这个上限值应当能满足你的设计需要。



如果是那样的话
我就将他分开
比如:
10^3x 10^4
可以吗?
点赞  2009-4-15 15:04

围绕楼主问题进行讨论

引用: 原帖由 heningbo 于 2009-4-15 15:04 发表



如果是那样的话
我就将他分开
比如:
10^3x 10^4
可以吗?


可以。
如上所述,分频链的组合灵活性为我们的设计实现提供做多种选择的可能。
设计总是具体的,实际设计要从具体要求和你所拥有的条件出发,选择适合你的解决方案和方法。甚至于可以躲开HDL的PLA等器件直接使用逻辑电路搭建。
但那可就是另一个回事了。因为这里只是围绕楼主提出的HDL方面的问题进行讨论的,而非具体设计。论坛上一题一议,主题突出比较好。你如果有兴趣,建议你另立主题,推动互助互学,好吗?

[ 本帖最后由 xiaoxif 于 2009-4-16 14:10 编辑 ]
点赞  2009-4-16 12:16

Re: [讨论] VHDL分频

好的谢谢哦
点赞  2009-4-17 09:21

Re: [讨论] VHDL分频

好的,谢谢哦
点赞  2009-4-17 09:22
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复