Ⅰ 如何用Verilog实现一组数据的两两相减,最后输出
你题目中没说明白,men[0]-men[1]和men[1]-men[0]算不算是同一个减法?其实只要2个for循环就可以了,如果当作不是同一个减法就只好全部数都循环减一遍了。而且你要存储,这个数据量比较多。
我写个程序给你参考一下(我也不知道自己写对没,写错了请高手们指点一下)
算作同一个减法时:
reg[7:0]tmp[44:0];
integer x;
for(i=0;i<9;i=i+1)
for(j=i+1;j<10;j=j+1)
begin
tmp[x]=men[i]-men[j];
x=x+1;
end
不算作同一个减法:
reg[7:0]tmp[89:0];
integer x;
for(i=0;i<9;i=i+1)
for(j=0;j<9;j=j+1)
begin
if(i!=j)
begin
tmp[x]=men[i]-men[j];
x=x+1;
end
end
Ⅱ 用JAVA制作一个小程序,计算两个数的加减乘除,用Applet实现
下面两个可以么,是我做实验答辩时用到的!
import java.awt.*;//AWT核心包
import java.awt.event.*;//提供事件类和监听器
public class Counter extends Frame implements ActionListener
{
TextField t=new TextField("");//文本框
Panel p1=new Panel();//new一个panel,用于存放数字键和符号键。
Panel p2=new Panel();//new一个panel,用于存放开方、平方、和清除键。
Button[] b=new Button[10];//实例化Button对象
Button bAdd=new Button("加");
Button bSub=new Button("减");
Button bMul=new Button("乘以");
Button bPoint=new Button(".");
Button bDiv=new Button("除以");
Button bEqual=new Button("等于");
Button bSqrt=new Button("开方");
Button bPow=new Button("平方");
Button bNull=new Button("清除");
String str1=""; //str1和str2存放两个输入的数
String str2="";
String operator=null; //存放加减乘除以及开平方的符号
boolean first=true; //检验输入的是否为第一个数
int countOper=0; //累计输入符号的个数,连加连减等操作中会用到
double result=0.0; //暂存结果
double num1=0.0,num2=0.0; //两个输入的数做运算时转化为double存放
boolean error=false; //检验除数是否为0
//构造方法
public Counter()
{
Frame s=new Frame("计算器");//创建Frame
for(int i=0;i<10;i++)//利用for循环将数字键添加进p1中
{
b[i]=new Button(String.valueOf(i));
p1.add(b[i]);
b[i].setActionCommand("number");
b[i].setForeground(new Color(150,20,20));
b[i].addActionListener(this);//调用addActionListener()方法注册事件监听器
}
p1.add(bPoint);
bPoint.setActionCommand("number");
p1.add(bAdd); //数字键,符号键放置在panel的p1中
p1.add(bSub);
p1.add(bMul);
p1.add(bDiv);
p1.add(bEqual);
p2.add(bSqrt);//开方键,平方键,清除键放置在panel的p2中
p2.add(bPow);
p2.add(bNull);
bAdd.setActionCommand("oper");
bSub.setActionCommand("oper");
bMul.setActionCommand("oper");
bDiv.setActionCommand("oper");
bAdd.setForeground(Color.red);//为组键设计颜色
bSub.setForeground(Color.red);
bMul.setForeground(Color.red);
bDiv.setForeground(Color.red);
bPoint.setForeground(Color.black);
bEqual.setForeground(Color.red);
bSqrt.setForeground(Color.blue);
bPow.setForeground(Color.blue);
bNull.setForeground(Color.blue);
bAdd.addActionListener(this);//调用addActionListener()方法注册事件监听器
bSub.addActionListener(this);
bMul.addActionListener(this);
bDiv.addActionListener(this);
bPoint.addActionListener(this);
bEqual.addActionListener(this);
bSqrt.addActionListener(this);
bPow.addActionListener(this);
bNull.addActionListener(this);
p1.setLayout(new GridLayout(4,4,5,5));//网格布局管理器,把容器根据行数和列数分成同样大小的单元,
//每个单元可容纳一个组件,并且此组件会填满网格单元,不能控
//制其占据网格的大小。4、4为网格的行、列数。5、5为组建之间的
//间距
p2.setLayout(new FlowLayout());//用FlowLayout布局管理器将组建默认剧中排放,默认间隙为5个像素
add(t,"North"); //frame的north放置输入框,panel放置在center和south
add(p1,"Center");//将p1添加到Center中
add(p2,"South");//将p2添加到South中
setLocation(400,200);//设计按钮尺寸
setSize(200,200);//设计窗口尺寸
setBackground(new Color(20,200,10));//设置Frame的背景,默认为白色
setVisible(true);//设置Frame设置为可见
addWindowListener(new WindowAdapter(){ //关闭窗口功能
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
//实现接口ActionListener
public void actionPerformed(ActionEvent e)
{
Button temp=(Button)e.getSource();
if(e.getActionCommand().equals("number"))
{
if(first)
{
str1=str1+temp.getLabel();
t.setText(str1);//将输入的str1显示在文本框中
}
else
{
str2=str2+temp.getLabel();
t.setText(str2);//将输入的str2显示在文本框中
}
}
else if(e.getActionCommand().equals("oper"))
{
if(str1=="") //如果还没有输入数就点击运算符执行if
{
countOper=0;//若此,则将计数清零
first=true;
}
else
{
countOper++;//计算输入符号的个数
if(countOper>1)//若输入的符号个数多余一个,则可以进行计算
{
getResult();
}
operator=temp.getLabel();//存放加减乘除以及开方、平方的符号
first=false;
}
}
else if(e.getActionCommand().equals("开方"))
{
double d=Math.sqrt(Double.parseDouble(str1));
str1=String.valueOf(d);//将计算出来的结果再次传给str1,为连计算准备
t.setText(String.valueOf(d));//将计算出来的结果传至文本框中
first=false;//置为false,即已输入第一个数
}
else if(e.getActionCommand().equals("平方"))
{
double f=Math.pow(Double.parseDouble(str1),2);
str1=String.valueOf(f);
t.setText(String.valueOf(f));
first=false;
}
else if(e.getActionCommand().equals("清除"))
{
str1="";//清空
str2="";
t.setText("");//将文本框清空
countOper=0;//将按键计数器清零
first=true;
error=false;
}
else if(e.getActionCommand().equals("等于"))
{
if((str1=="")||(str2=="")) //两个数没有输全就点击等号,执行if
{
countOper=0;//将按键计数器清零
first=true;
}
else
{
getResult();
countOper=0;
}
}
}
//运算结果的方法
public void getResult()
{
num1=Double.parseDouble(str1);
num2=Double.parseDouble(str2);
if(operator.equals("加"))
{
result=num1+num2;
}
else if(operator.equals("减"))
{
result=num1-num2;
}
else if(operator.equals("乘以"))
{
result=num1*num2;
}
else if(operator.equals("除以"))
{
if(num2==0.0) //除数为0的处理方法
{
error=true;
}
else
{
result=num1/num2;
}
}
if(error)
{
t.setText("error");
}
else
{
t.setText(String.valueOf(result));
str1=String.valueOf(result); //运算后把结果放入str1中,str2清空,为连加连减等操作做准备
str2="";
}
}
//主方法
public static void main(String[] args)
{
new Counter();//创建一个对象"计算器"
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class CalculatorPanel extends JPanel
implements ActionListener
{ public CalculatorPanel()
{ setLayout(new BorderLayout());
display = new JTextField("0");
display.setEditable(false);
add(display, "North");
JPanel p = new JPanel();
p.setLayout(new GridLayout(4, 4));
String buttons = "789/456*123-0.=+";
for (int i = 0; i < buttons.length(); i++)
addButton(p, buttons.substring(i, i + 1));
add(p, "Center");
}
private void addButton(Container c, String s)
{ JButton b = new JButton(s);
c.add(b);
b.addActionListener(this);
}
public void actionPerformed(ActionEvent evt)
{ String s = evt.getActionCommand();
if ('0' <= s.charAt(0) && s.charAt(0) <= '9'
|| s.equals("."))
{ if (start) display.setText(s);
else display.setText(display.getText() + s);
start = false;
}
else
{ if (start)
{ if (s.equals("-"))
else op = s;
}
else
{ calculate(Double.parseDouble(display.getText()));
op = s;
start = true;
}
}
}
public void calculate(double n)
{ if (op.equals("+")) arg += n;
else if (op.equals("-")) arg -= n;
else if (op.equals("*")) arg *= n;
else if (op.equals("/")) arg /= n;
else if (op.equals("=")) arg = n;
display.setText("" + arg);
}
private JTextField display;
private double arg = 0;
private String op = "=";
private boolean start = true;
}
public class CalculatorApplet extends JApplet
{ public void init()
{ Container contentPane = getContentPane();
contentPane.add(new CalculatorPanel());
}
}
Ⅲ matlab如何让两个加法器相减
##MATLAB之Simulink(四)
##两位二进制数加法器
在上一节中,我们学习了全加器的原理并且进行了仿真,今天我们来做一个实例——两位二进制数的加法器。
由于全加器有三个输入,其中一个是由低位的进位输入进来的,但是最低位只有两个输入,所以两个最低位相加不能用加法器,那么应该如何相加呢?这里给大家介绍另一种加法器——半加器。
半加器定义:
两个1位二进制数相加,若只考虑了两个加数本身,而没有考虑由低位来的进位的运算称为半加,而实现半加运算的逻辑电路称为半加器。
也就是说,半加器仅适用于一位二进制数的相加,不需要考虑低位的进位。所以我们需要用到一个半加器和一个全加器,半加器用来计算两个低位的结果,全加器用来计算两个高位的结果,同时考虑低位的进位。
一般情况下,用A、B来表示两个一位二进制加数,用S表示A、B的和,C表示A、B的进位。
先来仿真一下半加器:
列出真值表
在这里插入图片描述
得出表达式:
在这里插入图片描述
在这里插入图片描述
根据表达式,很容易可以作出半加器的模型
(过程这里不再多说,不懂得朋友请看我的上一篇全加器的文章)
在这里插入图片描述我们假设输入的数分别为00、01、10、11,那么输入矩形波的设置应该是这样:
在这里插入图片描述我们用示波器连接两个输入和两个输入,观察仿真结果:
在这里插入图片描述
这里有四行波形,第一行为加数A,第二行为加数B,第三行为S,第四行为C。
不难看出,仿真结果与真值表相对应,半加器仿真成功!
接下来,我们直接将一个半加器和一个全加器合并在一起稍微修改,就可以得到一个两位二进制数的加法器:
在这里插入图片描述这里需要注意的是,半加器用来计算两个低位,全加器用来计算两个高位,全加器中的进位输入由半加器的进位输出连接。
在这幅图中,A0,A1表示两个低位,B0,B1表示两个高位。
我们用三个示波器分别表示第一个加数、第二个加数和结果。
接下来我们看仿真结果:
第一个加数:
在这里插入图片描述
第二个加数:
在这里插入图片描述结果:
在这里插入图片描述
注意:每幅图都是低位在上,高位在下。
我们进行验证,不难发现仿真结果正确。
这就是两位二进制加法器的仿真过程,掌握这个方法后很容易设计出多位二进制加法器,没错,只要增加几个全加器就可以了。
##以上就是本节的全部内容,后续内容会逐渐上传,相关源码也会统一上传,也可以到公众号私聊我要。
##不足之处请及时指出,相互学习
##不懂得小伙伴可以到我的公众号"歌者X"私信我,看到后会回复的,欢迎交流学习!
Ⅳ verilog如何实现两数相减
1、像你这样也是可以的,但只能以大减小。
2、你的输入输出都为无符号数,结果是无所谓正负之分的,也无溢出。要想结果可正可负,你可以将寄存器都设置成有符号数的,但这样一来就有溢出的问题了,但只要你在进行运算时注意结果不要超出范围就行了。