vhdl 请各位大虾 帮我改正一下这几个程序的错误

改正以下程序中的错误,简要说明原因,并指出可综合成什么电路。1.libraryieee;useieee.std_logic_1164.all;entityd_flip_f... 改正以下程序中的错误,简要说明原因,并指出可综合成什么电路。
1. library ieee;
use ieee.std_logic_1164.all;
entity d_flip_flop is
port(d, clk: in std_logic;
q: out std_logic);
end d_flip_flop;
architecture rtl of d_flip_flop is
begin
if clk’event and clk=’1’ then
q<=d;
end if;
end rtl;

2. library ieee;
use ieee.std_logic_1164.all;
entity d_latch is
port(d, ena: in std_logic;
q: out std_logic);
end d_latch;
architecture rtl of d_latch is
begin
if ena = ’1’ then
q<=d;
end if;
end rtl;

3.library ieee;
use ieee.std_logic_1164.all;
entity test is
port(d, clk: in std_logic;
q: out std_logic);
end test;
architecture rtl of test is
begin
process(clk)
begin
wait until clk’event and clk=’1’
q<=d;
end process;
end rtl;
4.library ieee;
use ieee.std_logic_1164.all;
entity test is
port(d1, d2: in std_logic;
sel: in std_logic;
q: out std_logic);
end test;
architecture rtl of test is
begin
process(d1, d2, sel)
begin
case sel is
when ‘0’ => q <= d1;
when ‘1’ => q <= d2;
end case;
end process;
end rtl;

5.library ieee;
use ieee.std_logic_1164.all;
entity test is
port(d1, d2: in std_logic;
sel: in std_logic;
q: out std_logic);
end test;
architecture rtl of test is
begin
process(d1, d2, sel)
begin
q<=d1 when sel = ’0’ else
d2;
end process;
end rtl;

6.library ieee;
use ieee.std_logic_1164.all;
entity test is
port(clk: in std_logic;
count: buffer std_logic_vector(3 downto 0));
end test;
architecture rtl of test is
begin
process(clk)
begin
if clk’event and clk=’1’ then
count<=count+1;
end if;
end process;
end rtl;
展开
 我来答
匿名用户
2011-11-10
展开全部
好多……
第一个是个D触发器,不对的原因我觉得是主要的语句没写到process里面去,毕竟那个是通过敏感变量clk控制输出的。
第二个名字写的很清楚,就是个锁存器;不对的原因应该跟上面的差不多。
第三个我觉得挺奇怪的,wait语句我一般都是在testbench里才用,这一边名叫test,一边又写的像D触发器……我弄testbench的话都是直接用软件生成前面的一大截,原理是用component语句调用要仿真的模块。
第四个是个二选一;我手边没有软件不好下定论。问题的话,比较明显的事case没有default,这个只是个warning不过一般还是加上好;而不对的地方我觉得就是这个case可能应该放在process外,原因我说不上来~~~不好意思哈
第五个也是二选一;q<=d1 when sel = ’0’ else d2;这个语句要放在process外。原因我也说不清。。。
第六个是一个16进制计数器。可以考虑把count改成out类型(话说一般不推荐用buffer的)然后加一个signal给count赋值(就是在process里只操作加的signal而不操作count)。不过要真说他是16进制计数器的话又少了进位、复位信号之类的,总之感觉怪怪的,就那么不停的累加循环。

其实真要看语法错误的话最好的就是拿到软件里综合一下;要看功能对不对就用软件仿真一下,总之比在这里纯靠想要靠谱的多。
tudou0digua
2011-11-12 · TA获得超过375个赞
知道小有建树答主
回答量:269
采纳率:0%
帮助的人:338万
展开全部
的确很多啊!!
1、像一楼说的那样,应该加个进程 ,clk作为敏感信号,是d触发器吧,上升沿有效
2、按名称来讲是锁存器,但看他写的程序的话,我觉得还是一个d触发器,如果实现d触发器的功能的话,加个进程就行了,此时是高电平有效,但如果做,锁存器的话,我觉得这程序完全错了
3、wait语句没用过,不知道哪里错了
4、process(d1, d2, sel)我觉得d1,d2,就不用放敏感信号里了,当然要不要放要具体看你要实现什么功能,还有就是,少了的when others ,还有case-when是顺序语句,放在进程里是没错的,功能的话,是数据选择器
5、when-else是并行语句,不能放在进程中,你可以把进程去掉,功能的话 也是2选一数据选择器
6、就像楼上说的那样
如果是16进制计数器的话又少了进位、复位信号之类的,总之感觉怪怪的,就那么不停的累加循环。
用buffer的话,是既可以做输出,又可以在结构体中实现运算,有没有语法错误就不知道了

最后,我本来想在电脑上运行一下这些程序,但悲剧的发现,我的quartus软件过期了
最后的最后,希望对你有所帮助吧!!!!
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式