vhdl怎么表示8位左右移位寄存器?
这样有错吗?libraryieee;useieee.std_logic_1164.all;entityshift8isport(d,clk:instd_logic;b0,...
这样有错吗?
library ieee;
use ieee.std_logic_1164.all;
entity shift8 is
port(d,clk:in std_logic;
b0,b1,b2,b3,b4,b5,b6,b7:out std_logic);
end entity shift8;
architecture rtl of shift8 is
shared variable i: integer [:=0];
signal q:std_logic_vector(7 downto 0);
begin
process(clk)is
begin
if(clk'event and clk='1')then
if(d='1')then
if(i=7)then q(i)<='0';
else(q(i+1)<=q(i),
i:=i+1);
end if;
else
if(i=0)then q(i)<='0';
else(q(i-1)<=q(i),
i:=i-1);
end if;
end if;
end if;
b0<=q(0);
b1<=q(1);
b2<=q(2);
b3<=q(3);
b4<=q(4);
b5<=q(5);
b6<=q(6);
b7<=q(7);
end process;
end architecture rtl;
编译时出现了错误
ERROR:HDLParsers:164 - "D:/xilinx/shift/shift.vhd" Line 9. parse error, unexpected AFFECT, expecting RETURN or IDENTIFIER or RSQBRACK
想问一下哪里出错了
错误的位置显示在shared variable i: integer [:=0];这句 展开
library ieee;
use ieee.std_logic_1164.all;
entity shift8 is
port(d,clk:in std_logic;
b0,b1,b2,b3,b4,b5,b6,b7:out std_logic);
end entity shift8;
architecture rtl of shift8 is
shared variable i: integer [:=0];
signal q:std_logic_vector(7 downto 0);
begin
process(clk)is
begin
if(clk'event and clk='1')then
if(d='1')then
if(i=7)then q(i)<='0';
else(q(i+1)<=q(i),
i:=i+1);
end if;
else
if(i=0)then q(i)<='0';
else(q(i-1)<=q(i),
i:=i-1);
end if;
end if;
end if;
b0<=q(0);
b1<=q(1);
b2<=q(2);
b3<=q(3);
b4<=q(4);
b5<=q(5);
b6<=q(6);
b7<=q(7);
end process;
end architecture rtl;
编译时出现了错误
ERROR:HDLParsers:164 - "D:/xilinx/shift/shift.vhd" Line 9. parse error, unexpected AFFECT, expecting RETURN or IDENTIFIER or RSQBRACK
想问一下哪里出错了
错误的位置显示在shared variable i: integer [:=0];这句 展开
2个回答
展开全部
首先,一个8位的移位寄存器不应该这么写。其次里面有好些错误,我先给你个正确的寄存器的思路:
entity shift8 is
port(d,clk:in std_logic;
b: out std_logic_vector(7 downto 0)
);
end entity shift8;
architecture rtl of shift8 is
signal b_s : std_logic_vector(7 downto 0);
begin
process (clk)
begin
if rising_edge(clk) then
b_s <= b_s(6 downto 0) & d; --左移
--或者 b_s <= d & b_s(7 downto 1); --右移
end if;
b <= b_s;
end process;
end rtl;
上面才是正确的以为寄存器的VHDL写法。 我建议你把我的代码综合以后用软件看看RTL图,你就会理解VHDL描述的东西都可以转化为逻辑电路,不能用写C的思维来写VHDL。
另外附加一句建议,SHARED VARIABLE,VARIABLE等最好不要在你的逻辑电路设计中使用,用也只在TESTBENCH中使用,因为在片上,VARIABLE什么都不是,是无法被综合成电路的一部分的。
希望能帮到你
entity shift8 is
port(d,clk:in std_logic;
b: out std_logic_vector(7 downto 0)
);
end entity shift8;
architecture rtl of shift8 is
signal b_s : std_logic_vector(7 downto 0);
begin
process (clk)
begin
if rising_edge(clk) then
b_s <= b_s(6 downto 0) & d; --左移
--或者 b_s <= d & b_s(7 downto 1); --右移
end if;
b <= b_s;
end process;
end rtl;
上面才是正确的以为寄存器的VHDL写法。 我建议你把我的代码综合以后用软件看看RTL图,你就会理解VHDL描述的东西都可以转化为逻辑电路,不能用写C的思维来写VHDL。
另外附加一句建议,SHARED VARIABLE,VARIABLE等最好不要在你的逻辑电路设计中使用,用也只在TESTBENCH中使用,因为在片上,VARIABLE什么都不是,是无法被综合成电路的一部分的。
希望能帮到你
更多追问追答
追问
我想问下,你都代码里d是不是移位控制信号啊
追答
d是寄存器的输入值,你所说的移位控制信号是什么意思?
展开全部
用vhdl表示八位寄存器的程序如下所示:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity a is
port(clk:in std_logic;
data_in:in std_logic;
data_out:out std_logic_vector(7 downto 0));//定义输出为8位向量;
end a;
architcture art of a is //程序主体;
signal temp:std_logic_vector(7 downto 0);
begin
process(clk) //进程主体;
begin
if rising_edge(clk) then //等待脉冲上升沿到来;
temp<=temp(7 downto 1)&datain; //进行移位赋值;
end if;
end process;
end art;
VHDL语言是一种用于电路设计的高级语言。它在80年代的后期出现。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言 。VHDL翻译成中文就是超高速集成电路硬件描述语言,主要是应用在数字电路的设计中。它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中。当然在一些实力较为雄厚的单位,它也被用来设计ASIC。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity a is
port(clk:in std_logic;
data_in:in std_logic;
data_out:out std_logic_vector(7 downto 0));//定义输出为8位向量;
end a;
architcture art of a is //程序主体;
signal temp:std_logic_vector(7 downto 0);
begin
process(clk) //进程主体;
begin
if rising_edge(clk) then //等待脉冲上升沿到来;
temp<=temp(7 downto 1)&datain; //进行移位赋值;
end if;
end process;
end art;
VHDL语言是一种用于电路设计的高级语言。它在80年代的后期出现。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言 。VHDL翻译成中文就是超高速集成电路硬件描述语言,主要是应用在数字电路的设计中。它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中。当然在一些实力较为雄厚的单位,它也被用来设计ASIC。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询