VHDL代码如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
EN
tiTY selector IS
PORT ( CLK : IN STD_LOGIC;
-- DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); --输入用下面定义信号代替
POUT : OUT STD_LOGIC_VECTOR(9 DOWNTO 0);
FOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) );
END selector;
ARCHITECTURE behav OF selector IS
SIGNAL FOUT_R : STD_LOGIC_VECTOR(31 DOWNTO 0);
SIGNAL POUT_R : STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL CNT : STD_LOGIC_VECTOR(2 DOWNTO 0):="001" ;
SIGNAL DIN : STD_LOGIC_VECTOR(7 DOWNTO 0):="00000001" ; --设定输入初值,用作8位输入值
BEGIN
PROCESS(CLK )
BEGIN
IF CLK'EVENT AND CLK = '1' THEN
CASE CNT IS
WHEN "001" =>FOUT_R(7 DOWNTO 0) <=DIN;CNT<=CNT+1;
WHEN "010" =>FOUT_R(15 DOWNTO 8) <=DIN;CNT<=CNT+1;
WHEN "011" =>FOUT_R(23 DOWNTO 16) <=DIN;CNT<=CNT+1;
WHEN "100" =>FOUT_R(31 DOWNTO 24) <=DIN;CNT<=CNT+1;
WHEN "101" =>POUT_R(7 DOWNTO 0) <=DIN;CNT<=CNT+1;
WHEN "110" =>POUT_R(15 DOWNTO 8) <=DIN;CNT<="001";
WHEN OTHERS =>CNT<="001";
END CASE;
END IF;
END PROCESS;
POUT<=POUT_R(9 DOWNTO 0);
FOUT<=FOUT_R;
END behav;
Warning: Design contains 1 input pin(s) that do not drive logic
Warning (15610): No output dependent on input pin "clk"
编译器警告:输出不依赖输入信号“CLK”。 下载
芯片验证也是CLK信号没有任何作用,即使没给CLK脉冲信号,case里的6个赋值语句都动作了。
小弟编程水平有限,不懂程序这样设计是否正确,
请求大神帮忙指点,小弟在此谢过!!
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY selector IS
PORT ( CLK : IN STD_LOGIC;
DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); --输入用下面定义信号代替
--POUT : OUT STD_LOGIC_VECTOR(9 DOWNTO 0);
POUT1 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
POUT2 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
POUT3 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
POUT4 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
POUT5 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
POUT6 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
FOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) );
END selector;
ARCHITECTURE behav OF selector IS
SIGNAL FOUT_R : STD_LOGIC_VECTOR(31 DOWNTO 0):= "00000001000000010000000100000001";
SIGNAL POUT_R : STD_LOGIC_VECTOR(15 DOWNTO 0):="0000000100000001";
SIGNAL CNT : STD_LOGIC_VECTOR(2 DOWNTO 0):="001" ;
--SIGNAL DIN : STD_LOGIC_VECTOR(7 DOWNTO 0):="00000001" ; --设定输入初值,用作8位输入值
BEGIN
PROCESS(CLK )
BEGIN
IF CLK'EVENT AND CLK = '1' THEN
CASE CNT IS
WHEN "001" =>FOUT_R(7 DOWNTO 0) <=DIN;CNT<=CNT+1;
WHEN "010" =>FOUT_R(15 DOWNTO 8) <=DIN;CNT<=CNT+1;
WHEN "011" =>FOUT_R(23 DOWNTO 16) <=DIN;CNT<=CNT+1;
WHEN "100" =>FOUT_R(31 DOWNTO 24) <=DIN;CNT<=CNT+1;
WHEN "101" =>POUT_R(7 DOWNTO 0) <=DIN;CNT<=CNT+1;
WHEN "110" =>POUT_R(15 DOWNTO 8) <=DIN;CNT<="001";
WHEN OTHERS =>CNT<="001";
END CASE;
END IF;
END PROCESS;
POUT1<=FOUT_R(7 DOWNTO 0);
POUT2<=FOUT_R(15 DOWNTO 8);
POUT3<=FOUT_R(23 DOWNTO 16);
POUT4<=FOUT_R(31 DOWNTO 24);
POUT5<=POUT_R(7 DOWNTO 0);
POUT6<=POUT_R(15 DOWNTO 8);
FOUT<=FOUT_R;
END behav;
你试试看看是不是你想要的
这样也没解决问题呀,我设计这个模块并不需要POUT1——POUT6这些接口的,这样修改也就是多增加这几个接口而已吧。关键问题是要使case里的赋值语句受CLK信号控制, 而我那个程序即使没给CLK脉冲,CASE 里的赋值语句就全都被赋值了
“quartus ii并没有将你赋的初值送给signal 的DIN导致了当时钟上升沿来临时,没有值赋给FOUT_R和POUT_R 于是clk不起作用”。那个程序 也并不是这样的,不管给还是没给CLK脉冲,CASE 里的赋值语句就全都被赋值了,当然FOUT_R和POUT_R 也都被赋值了。
不过问题的确是由于定义的signal DIN的原因,本来想图个方便,定义一个signal DIN 作为8位输入数据,结果反而出错了。把DIN 定义为端口就没有了错误,验证也完全通过,这个错误的原因是这样解释:定义信号DIN的话,就直接和FOU_R和POUT_R链接起来,简单的说就是形成了内部电路,已经固定的链接起来,所以CLK不起作用。
一周热门 更多>