求VHDL分频计数代码

用VHDL编写一个程序:输入一个时钟CLK,经5分频得到一个工作时钟clk_5。以clk_5为工作时钟,控制2个计数器。计数器同时开始工作,第一个计数器:当计数器从0记到5后输出S1变为1。第二个计数器:当计数器从0记到55后输出S2变为1。2个输出S1,S2开始都为0。要有清零端。
代码能在Quartus II下编译仿真才给分。最好发邮箱:yanhuangzhiren@126.com

这么简单的逻辑应该自己会写,如果实在不行在网上搜一下也很容易找到

ENTITY clkdiv IS
PORT(clk : IN STD_LOGIC;
clk_div12 : OUT STD_LOGIC);
END clk_div;

ARCHITECTURE rtl OF clk_div IS
SIGNAL count : STD_LOGIC_VECTOR(2 DOWNTO 0);
SIGNAL clk_temp : STD_LOGIC;

BEGIN
PROCESS(clk, count)
BEGIN
IF (clk'event AND clk='1') THEN
IF(count = "101") THEN
count <= (OTHERS => '0');
clk_temp <= NOT (clk_temp);
ELSE
count <= count +1;
END IF ;
END IF ;
END PROCESS;

clk_div12 <= clk_temp;

END rtl;

上面这个是最常用的1:1占空比,由于没有复位信号,所以第一个周期可能是不完整的,但在实际应用中一般不成问题。
是不是把48MHz分频为0.2Hz?
如果这样,我给你个思路吧:
1、分频器实质上就是一个计数器,48MHz分到0.2Hz实际上就是设计一个计数器,使得每次计录48*2.5*10^6个脉冲后将一个信号翻转(也就是2.5秒高电平,2.5秒低电平);
2、具体思路就是设计一个能记录48*2.5*10^6各脉冲的计数器,再设计一个比较器(使之能够对记录脉冲及常数48*2.5*10^6进行比较);再将比较结果与48M的脉冲“与”后输入到一个翻转触发器(也就是一个一位计数器)clk端,D触发器的输出就是分频输出;
3、注意计数器要通过比较结果清零;分频输出同步时钟脉冲需要比计数脉冲滞后半个相位(也就是使用上升沿计数,使用下降沿触发翻转触发器),这样信号比较稳定;
其实挺基本的,查查资料就有答案了。祝好运!
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-12-18
其实大家回答问题,绝大多数不是想得你的多为的分的,大家只是想帮帮忙而已!顺便也提高一下自己的水平!我希望你以后,不管在什么地方问问题的时候,不要这样颐指气使,这是对别人最大的不尊重!你问问题一点诚恳的意思都没有,这样不好!希望我说的这些话,可以比给你编这个代码,让你学到更多!
第2个回答  2010-12-28
上面这个5分频不是奇分频了吗?按照你的方法就是十分频了。建议其查查奇分频的vhdl 代码。看看

求VHDL分频计数代码
1、分频器实质上就是一个计数器,48MHz分到0.2Hz实际上就是设计一个计数器,使得每次计录48*2.5*10^6个脉冲后将一个信号翻转(也就是2.5秒高电平,2.5秒低电平);2、具体思路就是设计一个能记录48*2.5*10^6各脉冲的计数器,再设计一个比较器(使之能够对记录脉冲及常数48*2.5*10^...

跪求VHDL 分频代码:将48MHz分出 2kHz 1kHz 1Hz
程序第十二行: SIGNAL cnt_1Hz:INTEGER RANGE 0 TO 24000000;数值范围过大,24000000太大,会占用很多的逻辑单元,建议,1hz的信号,从1Khz中计数取得,另外:你的程序别的地方都没有过错,很棒。

vhdl语言编写1mhz分频为1hz
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div is generic(n:integer :=1000000);port (clk:in std_logic;q:out std_logic);end div;architecture behave of div is signal count :integer range n-1 downto 0:=n-1;begin process(clk)begin if r...

用VHDL语言描述一个分频器,将10MHZ分频成1KHZ,拜托高手帮忙!
if count=500000 then ---频率多大,你可以改这个 计算公式为 count<=0; f1=2*count*f2,f1为分频前的频率 clk_data<=not clk_data; f2为分频后的频率 else count<=count_1;end if;end if;clock<=clk_data;end process;end art;

用VHDL编写一个分频器,实现输出1MHz-1Hz之间的任意频率
clk 输入一个相对较大的频率,频率要多少就用N_diviseur除!LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;ENTITY div IS GENERIC( n_diviseur : INTEGER := 2 );PORT ( clk : IN Std_Logic;clock : OUT Std_Logic);END ENTITY;ARCHITECTURE beha OF div IS BEGIN PROCESS (clk)VARIABLE ...

求高手帮忙用vhdl编一个2,4,8,16分频程序
这是对时钟进行10分频的VHDL代码,2,4,8,16分频原理与其相同。entity clk_div is port (clk_in :in std_logic;clk_out:out std_logic);end clk_div;architecture Behavioral of clk_div is signal cnt:integer range 1 to 10;signal clk_temp:std_logic:='0';begin process (clk_in,cnt)...

如何用VHDL实现分频?
输入端为:xor_en:异或使能,a和b:异或输入;输出端为:c:异或输出。当xor_en为高电平时,c输出a和b的异或值。当xor_en为低电平时,c输出信号b。其VHDL语言略。2分频(触发器)的实现 输入端为:时钟信号clk,输入信号d;输出端为:q:输出信号a,q1:输出信号a反。其VHDL语言略。4.分频器的...

用VHDL语言写5分频计数器,非常感谢!
entity div5 is port (clkin:in std_logic;clkout:out std_logic );end div5;architecture rt1 of div5 is signal step1:std_logic_vector(2 downto 0);signal step2:std_logic_vector(2 downto 0);begin process (clkin,step1,step2)begin if clkin'event and clkin = '1' then case...

HDL输入信号50MHz,需分频输出4Hz,代码及测试文件怎么实现?
在这段代码中,clk_in是50MHz的输入时钟信号,clk_out是分频输出的4Hz时钟信号。代码中使用了一个计数器,每次在输入时钟的上升沿计数器的值加1,当计数器的值到达12500时,就让输出时钟信号置为1。由于输入时钟信号为50MHz,所以这段代码就实现了将50MHz的输入信号分频输出4Hz的功能。要测试这段代码...

10分频器VHDL代码
generic(n:integer :=10);port (clk:in std_logic;q:out std_logic);end div10;architecture behave of div10 is signal count :integer range n-1 downto 0:=n-1;begin process(clk)begin if (clk'event and clk='1' and clk'last_value ='0') then count<=count-1;if count>= ...

相似回答
大家正在搜