用VHDL语言设计n位二进制计数器
entitymycontisgeneric(width:integer:=5);port(clr,clk:instd_logic;--时钟updown:instd_log...
entity mycont is
generic (width: integer := 5);
port(clr,clk: in std_logic; --时钟
updown : in std_logic; --计数方式
q : out std_logic_vector(width downto 0)); --输出
end entity mycont;
architecture fh1 of mycont is
signal temp: std_logic_vector(width downto 0);
begin
N1:process(clr,clk)
begin
if clr = '1' and updown = '1' then --顺序计数初始化
for i in width to 0 loop --各位置0
temp(i) <= '0';
end loop;
elsif clr = '1' and updown = '0' then --逆序计数初始化
for i in width to 0 loop --各位置1
temp(i) <= '1';
end loop;
elsif clk 'event and clk = '1' then --计数
if updown = '1' then --顺序计数
temp <= temp + '1';
elsif updown = '0' then --逆序计数
temp <= temp - '1';
end if;
end if;
end process N1;
q <= temp;
end architecture fh1;
编译显示说 Only one clock enable signal can be defined for a flipflop 应该怎么改 展开
generic (width: integer := 5);
port(clr,clk: in std_logic; --时钟
updown : in std_logic; --计数方式
q : out std_logic_vector(width downto 0)); --输出
end entity mycont;
architecture fh1 of mycont is
signal temp: std_logic_vector(width downto 0);
begin
N1:process(clr,clk)
begin
if clr = '1' and updown = '1' then --顺序计数初始化
for i in width to 0 loop --各位置0
temp(i) <= '0';
end loop;
elsif clr = '1' and updown = '0' then --逆序计数初始化
for i in width to 0 loop --各位置1
temp(i) <= '1';
end loop;
elsif clk 'event and clk = '1' then --计数
if updown = '1' then --顺序计数
temp <= temp + '1';
elsif updown = '0' then --逆序计数
temp <= temp - '1';
end if;
end if;
end process N1;
q <= temp;
end architecture fh1;
编译显示说 Only one clock enable signal can be defined for a flipflop 应该怎么改 展开
2个回答
展开全部
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity mycont is
generic (width: integer := 5);
port(clr,clk: in std_logic; --时钟
updown : in std_logic; --计数方式
q : out std_logic_vector(width downto 0)); --输出
end entity mycont;
architecture fh1 of mycont is
signal temp: std_logic_vector(width downto 0);
begin
N1:process(clr,clk)
begin
if clr = '1' then
if updown = '1' then --顺序计数初始化
for i in width to 0 loop --各位置0
temp(i) <= '0';
end loop;
elsif updown = '0' then --逆序计数初始化
for i in width to 0 loop --各位置1
temp(i) <= '1';
end loop;
end if;
elsif clk 'event and clk = '1' then --计数
if updown = '1' then --顺序计数
temp <= temp + '1';
elsif updown = '0' then --逆序计数
temp <= temp - '1';
end if;
end if;
end process N1;
q <= temp;
end architecture fh1;
试试上面这个描述,通过编译了,但未仿真。
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity mycont is
generic (width: integer := 5);
port(clr,clk: in std_logic; --时钟
updown : in std_logic; --计数方式
q : out std_logic_vector(width downto 0)); --输出
end entity mycont;
architecture fh1 of mycont is
signal temp: std_logic_vector(width downto 0);
begin
N1:process(clr,clk)
begin
if clr = '1' then
if updown = '1' then --顺序计数初始化
for i in width to 0 loop --各位置0
temp(i) <= '0';
end loop;
elsif updown = '0' then --逆序计数初始化
for i in width to 0 loop --各位置1
temp(i) <= '1';
end loop;
end if;
elsif clk 'event and clk = '1' then --计数
if updown = '1' then --顺序计数
temp <= temp + '1';
elsif updown = '0' then --逆序计数
temp <= temp - '1';
end if;
end if;
end process N1;
q <= temp;
end architecture fh1;
试试上面这个描述,通过编译了,但未仿真。
追问
真的过了耶...
再问一下啊
为什么if clr = '1' then
if updown = '1' then...
分开来就可以了呢...
追答
实际上不分开也能通过编译,但分开来描述更加符合行为描述的模块化和层次结构。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询