高分急求!分析VHDL代码
答案:2 悬赏:10
解决时间 2021-02-21 20:40
- 提问者网友:美人性情
- 2021-02-20 19:46
高分急求!分析VHDL代码
最佳答案
- 二级知识专家网友:山君与见山
- 2021-02-20 20:31
一,1、这是一个8位的计数初值可以控制的计数器!
2,rst为高有效的清零信号,当期无效时在每个时钟的上升沿判断load信号是否有效,若有效将计数初值初始化w为数据线上的data值,否则计数值加 1;计数值为程序的输出!
二,library ieee;
use IEEE.std_logic_1164.all;---用到的包
use IEEE.std_logic_unsigned.all;
use IEEE.std_logic_arith.all;
entity counter_t is ---程序头
generic(width : integer := 8);--定义width的属性;
port(data : in std_logic_vector (width-1 downto 0);--定义八位的数据输入端口;
load, en, clk, rst : in std_logic;--控制及使能信号;
q : out std_logic_vector (width-1 downto 0));八位的数据输出端口;
end counter_t;
architecture behave of counter_t is --architecture 结构;
signal count : std_logic_vector (width-1 downto 0); --信号量
begin--结构体开始
process(clk, rst) --新的进程process
begin--进程开始;
if rst = '1' then--判断复位信号是否有效;
count <=(others=>'0'); --复位信号有效,计数值清零;
elsif CLK'EVENT AND CLK='1' then
if load = '1' then--时钟信号上升沿检测load信号是否有效;
count <= data;--load信号有效,计数初值初始化为数据输入;
ELSIF en = '1' then --判断计数器使能信号是否有效;
count <= count + 1; --使能信号有效,计数值加1;
END IF;
end if;
end process; --进程结束;
Q<=COUNT; --输出当前计数器的计数值;
end behave; --architecture 结束;
附:出题老师真搞,题目二的图就是题目一得RTL级逻辑图!回答二只要把一的程序copy一下就行了!
-----已经修改过了 ;请给分 谢谢!
2,rst为高有效的清零信号,当期无效时在每个时钟的上升沿判断load信号是否有效,若有效将计数初值初始化w为数据线上的data值,否则计数值加 1;计数值为程序的输出!
二,library ieee;
use IEEE.std_logic_1164.all;---用到的包
use IEEE.std_logic_unsigned.all;
use IEEE.std_logic_arith.all;
entity counter_t is ---程序头
generic(width : integer := 8);--定义width的属性;
port(data : in std_logic_vector (width-1 downto 0);--定义八位的数据输入端口;
load, en, clk, rst : in std_logic;--控制及使能信号;
q : out std_logic_vector (width-1 downto 0));八位的数据输出端口;
end counter_t;
architecture behave of counter_t is --architecture 结构;
signal count : std_logic_vector (width-1 downto 0); --信号量
begin--结构体开始
process(clk, rst) --新的进程process
begin--进程开始;
if rst = '1' then--判断复位信号是否有效;
count <=(others=>'0'); --复位信号有效,计数值清零;
elsif CLK'EVENT AND CLK='1' then
if load = '1' then--时钟信号上升沿检测load信号是否有效;
count <= data;--load信号有效,计数初值初始化为数据输入;
ELSIF en = '1' then --判断计数器使能信号是否有效;
count <= count + 1; --使能信号有效,计数值加1;
END IF;
end if;
end process; --进程结束;
Q<=COUNT; --输出当前计数器的计数值;
end behave; --architecture 结束;
附:出题老师真搞,题目二的图就是题目一得RTL级逻辑图!回答二只要把一的程序copy一下就行了!
-----已经修改过了 ;请给分 谢谢!
全部回答
- 1楼网友:拾荒鲤
- 2021-02-20 21:09
1. clk是控制时钟;
data是外部输入的一个8位的二进制数;
rst是清零端;
load起保持作用;
en起加1作用;
q是输出端,是一个8位的二进制数。
当rst='1'时,不管其他端口的值是什么,q都为0(即输出总为0);
当rst='0'时,如果时钟clk的上升沿来了,就去判断load的值,
如果load='1',那么就将data原封不动的输出(即输出q=输入data),
如果load='0'时,就去判断en的值,
如果en='1',就将输入data加上1,然后输出(即输出q=输入data+1),
如果en='0',输出q就保持原来的值不变。
2. 你的图片中的电路其实就是你的程序生成的。图片中的电路称为RTL级电路,中文是寄存器传输级电路。在RTL级,设计是由一组寄存器以及寄存器之间的逻辑操作构成。RTL级电路只是电路的一种表现形式,电路也可以用基本门电路构成,称为门电路。
其实这个程序不难看懂,可能是你刚刚接触VHDL,希望你用心学习。知识这东西就像钱,总是多多益善的。
——Medied.Lee
data是外部输入的一个8位的二进制数;
rst是清零端;
load起保持作用;
en起加1作用;
q是输出端,是一个8位的二进制数。
当rst='1'时,不管其他端口的值是什么,q都为0(即输出总为0);
当rst='0'时,如果时钟clk的上升沿来了,就去判断load的值,
如果load='1',那么就将data原封不动的输出(即输出q=输入data),
如果load='0'时,就去判断en的值,
如果en='1',就将输入data加上1,然后输出(即输出q=输入data+1),
如果en='0',输出q就保持原来的值不变。
2. 你的图片中的电路其实就是你的程序生成的。图片中的电路称为RTL级电路,中文是寄存器传输级电路。在RTL级,设计是由一组寄存器以及寄存器之间的逻辑操作构成。RTL级电路只是电路的一种表现形式,电路也可以用基本门电路构成,称为门电路。
其实这个程序不难看懂,可能是你刚刚接触VHDL,希望你用心学习。知识这东西就像钱,总是多多益善的。
——Medied.Lee
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯