返回信息流用vhdl 求解f=(x1+x2)(x2+x3)(x1+x2);三个变量8种结果,假设000-111,都为1,对于第一个多项式x1+x2 当x1=0,x2=0时,f=0 故000,001排除置0,对于第二个多项式x2+x3 当x2=0,x3=0时,f=0 故000,100排除置0,对于第二个多项式x2+x3 当x1=0,x2=0时,f=0 故000,001排除置0。f是x1与x2与x3的多种组合形式,代码只解决了一种组合情况,小白求问程序该如何改进
LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY work;
entity d3_8 is
Port ( a,b,c:IN STD_LOGIC;
y:out STD_LOGIC_VECTOR (7 downto 0));
end d3_8;
architecture Behavioral of d3_8 is
signal se1: STD_LOGIC;
signal se2: STD_LOGIC;
signal se3: STD_LOGIC;
signal y1: STD_LOGIC_VECTOR (7 downto 0);
signal y2 : STD_LOGIC_VECTOR (7 downto 0);
signal y3 : STD_LOGIC_VECTOR (7 downto 0);
signal y0 : STD_LOGIC_VECTOR (7 downto 0);
begin
se1<=a or b;
se2<=b or c;
se3<=a or c;
y0<="11111111";
y1<="01110111" When se1='0';
y2<="00111111" When se2='0' ;
y3<="01011111" When se3='0';
y<=y0 and y1 and y2 and y3;
end Behavioral;
这是一条镜像帖。来源:北邮人论坛 / circuit / #26149同步于 2015/10/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖
Vhdl小白求问解决多项式问题
xl1015494833
2015/10/30镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
关键f的函数是可变的呀。不知道改进代码写公共的函数,f是由x1,x2,x3以及他们的非,组成的(或)与(或)与(或)的函数。求指教
【 在 cordialz 的大作中提到: 】
: 一共8中输入情况 直接用case语句描述不就完了么?标准的组合逻辑啊
关键是还得有逐步筛选非解的思想
【 在 cordialz 的大作中提到: 】
: 一共8中输入情况 直接用case语句描述不就完了么?标准的组合逻辑啊
首先运算最好在process中完成,process之间传递信号的时候再使用signal赋值。
可在process中使用if语句或者case语句完成多种状态的描述;
在输出端,最后加上时钟,将冒险消除。
代码已改,求问大神“在输出端,最后加上时钟,将冒险消除”不是很懂,还有就是我这个只适合f=(x or y)and(y or z)and(x or z),我也想要f由x,y,z,以及他们的非组成的f=( or )and( or )and( or ) 也可以运行这个函数程序,
LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY work;
entity d3_8 is
Port ( a,b,c:IN STD_LOGIC;
y:out STD_LOGIC_VECTOR (7 downto 0));
end d3_8;
architecture Behavioral of d3_8 is
signal se1,se2,se3: STD_LOGIC;
signal y0 : STD_LOGIC_VECTOR (7 downto 0);
begin
p3_8 :process(a,b,c)
begin
se1<=a or b;
se2<=b or c;
se3<=a or c;
y0<="11111111";
if(se1='0') then
y0<=y0 and "01110111";
end if;
if(se2='0') then
y0<=y0 and "00111111";
end if;
if(se3='0') then
y0<=y0 and "01011111";
end if;
y<=y0;
end process;
end Behavioral;
【 在 zhangee 的大作中提到: 】
: 首先运算最好在process中完成,process之间传递信号的时候再使用signal赋值。
: 可在process中使用if语句或者case语句完成多种状态的描述;
: 在输出端,最后加上时钟,将冒险消除。
【 在 xl1015494833 的大作中提到: 】
: 代码已改,求问大神“在输出端,最后加上时钟,将冒险消除”不是很懂,还有就是我这个只适合f=(x or y)and(y or z)and(x or z),我也想要f由x,y,z,以及他们的非组成的f=( or )and( or )and( or ) 也可以运行这个函数程序,
: LIBRARY ieee;
: USE ieee.std_logic_1164.all;
: ...................
就算是在一个process中也不能在不同的if语句中对一个信号付值。
VHDL是硬件描述语言,不是硬件设计语言。需要程序员在内心看到电路后才能够进行描述。
首先ls是对的,一个process中不要多个if同时对某一个信号赋值,用else if,另外,lz你到底想表达啥,为神马我看了半天都不知道你要说啥,“代码只解决了一种组合情况”是神马意思,hdl语言不是C++,可以写函数
谢谢,主要是用vhdl来解决3-SAT问题大概是这个样子(x1 or x2 or x3)and(x3 or x4)and(not x1 or x5)对于所有的x是否有一种01取值,使得最后的结果是1,对语言不是很了解,在学习中
【 在 NM999 的大作中提到: 】
: 首先ls是对的,一个process中不要多个if同时对某一个信号赋值,用else if,另外,lz你到底想表达啥,为神马我看了半天都不知道你要说啥,“代码只解决了一种组合情况”是神马意思,hdl语言不是C++,可以写函数
谢谢,对这方面不是很熟悉,在学习ing
【 在 zhangee 的大作中提到: 】
: 就算是在一个process中也不能在不同的if语句中对一个信号付值。
: VHDL是硬件描述语言,不是硬件设计语言。需要程序员在内心看到电路后才能够进行描述。