大家帮我看下这个程序该怎么改吧,谢谢了
就是这个图,是一个简单的细胞自动机。
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY ca2 IS
PORT (clk : IN std_logic;
Q1,Q2,Q3,Q4: OUT std_logic);
END ca2;
ARCHITECTURE behavioral OF ca2 IS
COMPONENT dff
PORT (
d,clk :IN STD_LOGIC;
q:OUT STD_LOGIC );
END COMPONENT;
SIGNAL data :STD_LOGIC_VECTOR (7 DOWNTO 0);
BEGIN
dffn_1: dff PORT MAP (data(0),clk,data(4));
dffn_2: dff PORT MAP (data(1),clk,data(5));
dffn_3: dff PORT MAP (data(2),clk,data(6));
dffn_4: dff PORT MAP (data(3),clk,data(7));
data(0) <= data(4) xor data(5);
data(1) <= data(4) xor data(6);
data(2) <= data(5) xor data(6) xor data(7);
data(3) <= data(6);
Q1 <= data(4);
Q2 <= data(5);
Q3 <= data(6);
Q4 <= data(7);
END behavioral; 自己动手丰衣足食
把 COMPONENT去掉,直接改成自己定义的信号,
再把功能移到process 里面
vhdl sample很多的 回复 2# yoyo_note
自己写了个,感觉初始信号都是0000,然后后面的就一直是0,该怎么解决?其实我是想做细胞自动机,就先写个4个寄存器的试试。谢谢~
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY ca3 IS
PORT (clk : IN std_logic;
Q1,Q2,Q3,Q4: OUT std_logic);
END ca3;
ARCHITECTURE behave OF ca3 IS
SIGNAL data :STD_LOGIC_VECTOR (7 DOWNTO 0);
BEGIN
data(0) <= 1;
cydff_inst:PROCESS (clk)
BEGIN
IF ( clk='1' AND clk'LAST_VALUE='0' AND clk'EVENT ) THEN
data(4) <=data(0);
data(5) <=data(1);
data(6) <=data(2);
data(7) <=data(3);
END IF;
data(0) <= data(4) xor data(5);
data(1) <= data(4) xor data(6);
data(2) <= data(5) xor data(6) xor data(7);
data(3) <= data(6);
Q1 <= data(4);
Q2 <= data(5);
Q3 <= data(6);
Q4 <= data(7);
END PROCESS;
END behave; 里面是xor,就是加法,初期值要有1奥
SIGNAL data :STD_LOGIC_VECTOR (7 DOWNTO 0) := "1111"; 上面这个值只是sim时候有效,
实际项目的时候最好用异步复位初期化,
或者同步load初期值 回复 5# yoyo_note
不知道为什么,在程序里初始化就会提示错误。方便qq或者邮箱吗?511843215 谢谢 LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY ca3 IS
PORT (
clk : IN std_logic;
RST_N : IN std_logic; -- low active
Q1,Q2,Q3,Q4: OUT std_logic
);
END ca3;
ARCHITECTURE behave OF ca3 IS
SIGNAL data :STD_LOGIC_VECTOR (7 DOWNTO 0);
BEGIN
process (clk, RST_N) begin
if (RST_N = '0') then
data(4) <='1';
data(5) <='1';
data(6) <='1';
data(7) <='1';
elsif (clk'event and clk = '1') then
data(4) <= data(4) xor data(5);
data(5) <= data(4) xor data(6);
data(6) <= data(5) xor data(6) xor data(7);
data(7) <= data(6);
end if;
end process;
Q1 <= data(4);
Q2 <= data(5);
Q3 <= data(6);
Q4 <= data(7);
END behave; 加了个RST_N,-- low active 回复 8# yoyo_note
再问下,RST_N这个应该怎样设置? RST_N在sim开始的给几个时钟的0,以后一直拉1
页:
[1]
2