计算平方根

时间:2014-09-25 14:17:18

标签: verilog computer-architecture system-verilog

我编写代码来计算完美的数字平方,但我得不到合适的输出。我接受输入b并注册ad。首先,我将1放入d,然后将其平方并存储在a中。然后与输入进行比较 - 如果不满意则增加d。但在输出时我得到的是square = XXXX

我的代码:

module square_root(b,clk,square);

input [3:0] b;
input clk;
output [3:0]square;
reg[3:0]a,square;
reg[2:0] d;

initial
  begin
    d<=3'b001;
  end

always@(clk)
  begin
    a<=d*d;
    if(a==b)
      square<=a;
    else
      d<=d+1;
  end
endmodule

2 个答案:

答案 0 :(得分:1)

更改此

initial
begin
  d<=3'b001;
end

initial
begin
  d=3'b001;
end

试验台:

module TB_SQT;
  reg [3:0]b;
  reg clk;
  wire [3:0]square;

  square_root SQT(b,clk,square);

  initial
  begin
    clk=0;
    b=9;
  end

  always
  #1 clk=!clk;

endmodule

答案 1 :(得分:0)

module Sqrt(
  input clk,
  input [3:0]in,
  output reg [3:0]out);

  reg [3:0]temp=1;

  always@(posedge clk)
  begin
    if((temp*temp)==in)
      out<=temp;
    else
      temp<=temp+1;
  end
endmodule

试验台:

module TB_Sqrt;
  reg clk;
  reg [3:0]in;
  wire [3:0]out;

  Sqrt SQRT(clk,in,out);

  initial
  begin
    clk=0;
    in=9;
  end

  always
  #2 clk=!clk;

endmodule

不太可能是最好的代码...但是嘿