工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

电路设计->综合电路图->综合电路图->除法运算电路设计方案汇总(九款模拟电路设计原理详解)

除法运算电路设计方案汇总(九款模拟电路设计原理详解)

发布人:fanxiaoxi 时间:2024-08-09 收藏

本文为大家带来九款不同的除法运算电路设计方案,包括这九款模拟电路设计的原理及设计过程。

除法运算电路设计方案一:基于模拟乘法器的除法运算电路设计

  该方案采用模拟乘法器做反馈支路,模拟乘法器有两个输入端,一个输出端。对于该除法运算电路,必须保证i1=i2,电路引入的才是负反馈。即当UI1》0时,,U0‘《0;而UI1《0时,U0’》0,由于U0与UI1反相,故要求U0’与U0同符号。因此,当模拟乘法器的k小于零时,UI2应小于零;而k大于零时,UI2应大于零;即k与UI2同符号。同理,若乘法模拟器的输出端通过电阻接集成运放的同相输入端,则为保证电路引入的是负反馈,UI2与k符号应当相反。

  在上述电路图中,设集成运放为理想运放,则Un=Up=0,为虚地,i1=i2,则

  UI1/R1=-Uo/R2=-kUI1UI2/R2

  整理上式,得出输出电压

  Uo=-R2UI1/kR1UI2

  令R1=1K,R2=2K

  则Uo=-2UI1/kUI2
 

除法运算电路设计方案二:二输入的除法电路

  设计一个二输入的除法电路,需要利用对数和指数运算电路实现或者用模拟乘法器在集成运放反馈通路中的应用来实现。

  接通电源后,将电路板的各管脚接好,u11、u12分别接两个输入端。由于有两个变量对观察u0带来不变,在研究u0的变化趋势是常常用控制变量法,即u11、u12中的一个不变,一个变化引起u0变化并观察它的变化趋势。

除法运算电路设计方案三:基于减法的除法器的算法

  对于32的无符号除法,被除数a除以除数b,他们的商和余数一定不会超过32位。首先将a转换成高32位为0,低32位为a的temp_a。把b转换成高32位为b,低32位为0的temp_b。在每个周期开始时,先将temp_a左移一位,末尾补0,然后与b比较,是否大于b,是则temp_a减去temp_b将且加上1,否则继续往下执行。上面的移位、比较和减法(视具体情况而定)要执行32次,执行结束后temp_a的高32位即为余数,低32位即为商。

  verilog HDL代码

  /*

  * module:div_rill

  * file name:div_rill.v

  * syn:yes

  * author:network

  * modify:rill

  * date:2012-09-07

  */

  module div_rill

  (

  input[31:0] a,

  input[31:0] b,

  output reg [31:0] yshang,

  output reg [31:0] yyushu

  );

  reg[31:0] tempa;

  reg[31:0] tempb;

  reg[63:0] temp_a;

  reg[63:0] temp_b;

  integer i;

  always @(a or b)

  begin

  tempa 《= a;

  tempb 《= b;

  end

  always @(tempa or tempb)

  begin

  temp_a = {32‘h00000000,tempa};

  temp_b = {tempb,32’h00000000};

  for(i = 0;i 《 32;i = i + 1)

  begin

  temp_a = {temp_a[62:0],1‘b0};

  if(temp_a[63:32] 》= tempb)

  temp_a = temp_a - temp_b + 1’b1;

  else

  temp_a = temp_a;

  end

  yshang 《= temp_a[31:0];

  yyushu 《= temp_a[63:32];

  end

  endmodule

  /*************** EOF ******************/

  testbench代码

  [html] view plain copy/*

  * module:div_rill_tb

  * file name:div_rill_tb.v

  * syn:no

  * author:rill

  * date:2012-09-07

  */

  `timescale 1ns/1ns

  module div_rill_tb;

  reg [31:0] a;

  reg [31:0] b;

  wire [31:0] yshang;

  wire [31:0] yyushu;

  initial

  begin

  #10 a = $random()%10000;

  b = $random()%1000;

  #100 a = $random()%1000;

  b = $random()%100;

  #100 a = $random()%100;

  b = $random()%10;

  #1000 $stop;

  end

  div_rill DIV_RILL

  (

  .a (a),

  .b (b),

  .yshang (yshang),

  .yyushu (yyushu)

  );

  endmodule

  /******** EOF ******************/

  仿真结果




评论

技术专区