|
对于你的问题1,2,3,4点我就以你举的这个8位寄存器来回答:
首先你的8位寄存器加入了clr这个复位信号,那么你的DFF也应该有这个信号,因此你的DFF中的PROCESS就应该改为:
process(clk)
begin
if clr = '1' then
Q <= '0'; --或者'X'
elsif(clk'event and clk='1') then
Q<=D;
end if; --你这里忘写了
end process;
好,这下你的DFF正确了,我接着你的代码写8位的:
另外,不造成概念混淆,我把你8位的entity改成这样:
entity reg_8bit is
port( clk_8, clr_8 : in std_logic;
x : in std_logic_vector(7 downto 0); --downto 中间没有空格
y: out std_logic_vector(7downto 0)
);
end reg_8bit;
architecture arch_reg_8bit of reg_8bit is
component dff
generic(参数); --这个例子没有参数,所以不写这句。如果有,那么这个参数为定值,FPGA运行过程中无法被改变(因为在综合过程中已经被翻译成电路了)。 至于参数的使用方法,你百度一下很容易知道了。
port(
clk,clr,D : in std_logic;
Q : out std_logic
);
end component;
begin
generate_8_dff : for i in 0 to 7 generate
dff_x : dff port map(
clk => clk_8,
clr => clr_8,
D => x(i),
Q => y(i)
);
end generate generate_8_dff,
end arch_reg_8bit;
上面的for i in n to m generate 的目的只是为了复制m-n+1次电路,没有任何时序因素在其中,不要和C语言中的FOR循环搞混了。 |
|