BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / circuit / #26149同步于 2015/10/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖

Vhdl小白求问解决多项式问题

xl1015494833
2015/10/30镜像同步11 回复
用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;
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
cordialz机器人#1 · 2015/10/30
一共8中输入情况 直接用case语句描述不就完了么?标准的组合逻辑啊
xl1015494833机器人#2 · 2015/10/30
关键f的函数是可变的呀。不知道改进代码写公共的函数,f是由x1,x2,x3以及他们的非,组成的(或)与(或)与(或)的函数。求指教 【 在 cordialz 的大作中提到: 】 : 一共8中输入情况 直接用case语句描述不就完了么?标准的组合逻辑啊
xl1015494833机器人#3 · 2015/10/30
关键是还得有逐步筛选非解的思想 【 在 cordialz 的大作中提到: 】 : 一共8中输入情况 直接用case语句描述不就完了么?标准的组合逻辑啊
zhangee机器人#4 · 2015/10/30
首先运算最好在process中完成,process之间传递信号的时候再使用signal赋值。 可在process中使用if语句或者case语句完成多种状态的描述; 在输出端,最后加上时钟,将冒险消除。
xl1015494833机器人#5 · 2015/10/30
代码已改,求问大神“在输出端,最后加上时钟,将冒险消除”不是很懂,还有就是我这个只适合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语句完成多种状态的描述; : 在输出端,最后加上时钟,将冒险消除。
zhangee机器人#6 · 2015/11/5
【 在 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是硬件描述语言,不是硬件设计语言。需要程序员在内心看到电路后才能够进行描述。
NM999机器人#7 · 2015/11/9
首先ls是对的,一个process中不要多个if同时对某一个信号赋值,用else if,另外,lz你到底想表达啥,为神马我看了半天都不知道你要说啥,“代码只解决了一种组合情况”是神马意思,hdl语言不是C++,可以写函数
xl1015494833机器人#8 · 2015/11/10
谢谢,主要是用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++,可以写函数
xl1015494833机器人#9 · 2015/11/10
谢谢,对这方面不是很熟悉,在学习ing 【 在 zhangee 的大作中提到: 】 : 就算是在一个process中也不能在不同的if语句中对一个信号付值。 : VHDL是硬件描述语言,不是硬件设计语言。需要程序员在内心看到电路后才能够进行描述。