VHDL新手求助!!!!!!!!!!!!!!!
最近课程设计,让用VHDL遍一个程序,感觉压力很大,特来求救啊!!!!!!!!!!!1题目要求:设计一个伪随机序列发生器,采用的生成多项式为1+X3+X7。要求具有一个RESET端和两个控制端来调整寄存器初值(程序中设定好四种非零初值可选)。
下面是我搞到的程序,但是就是运行不了,大神帮我看看有什么错误,是不是初始值没治好,最好有运行出来的4肿情况 的分析图quartus II 我们用这个仿真的
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity PRSG is
port (reset,clk:in std_logic;
sel:in std_logic_vector(1 downto 0);
dout:out std_logic_vector(7 downto 0));
end PRSG;
architecture behavioral of PRSG is
signal ddout:std_logic_vector(7 downto 0);
signal temp:std_logic;
begin
process(sel)
begin
if reset='1' then
ddout<="00000000";
elsif clk'event and clk='1' then
case sel is
when"00"=>ddout<="01010001";
when"01"=>ddout<="00110001";
when"10"=>ddout<="10001001";
when others=>ddout<="01111001";
end case;
temp<=ddout(0) xor ddout(3);
dout(0)<=ddout(1);
dout(1)<=ddout(2);
dout(2)<=ddout(3);
dout(3)<=ddout(4);
dout(4)<=ddout(5);
dout(5)<=ddout(6);
dout(6)<=ddout(7);
dout(7)<=ddout(7) xor temp;
end if;
end process;
end behavioral; 顶啊,没会的么 temp应该用变量吧,变量才是瞬间更新的。
temp<=ddout(0) xor ddout(3);
dout(0)<=ddout(1);
dout(1)<=ddout(2);
dout(2)<=ddout(3);
dout(3)<=ddout(4);
dout(4)<=ddout(5);
dout(5)<=ddout(6);
dout(6)<=ddout(7);
dout(7)<=ddout(7) xor temp; 回复 3# 蓝余
哥哥,不太懂啊,用变量?该怎么改,其他地方没什么逻辑错误啊,因为放上去后没有错误,有12个警告,还有我用SEL控制初始值的时候显示不出波形,悲剧,能帮我运行下看看了,大三了,这个语言没学过 你应该找本vhdl的书看看吧。
signal temp:std_logic; 改为 variable temp : std_logic;
进程里还要有敏感信号reset,clk 即为: process(reset,clk,sel) 变量赋值 用 := 不是《= 回复 5# 蓝余
太复杂了,我明天去试试,其实应该能出来的,但是不怎么知道就出不来! 回复 6# 蓝余
when"00"=>ddout<="01010001";
when"01"=>ddout<="00110001";
when"10"=>ddout<="10001001";
when others=>ddout<="01111001
是这部分要改成:=吗? 回复 6# 蓝余
知道了,前面改成变量后,后面赋值语句要变的是吧,这个输出确实是一直变化的,如果不设置时钟话,是不是定格了在某一瞬间了! 你确实要看一下书,把规则学一下,最基本的。看一天就会了
页:
[1]
2