- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi, I've written a verilog code for a function that finds root by bisection method but unfortunately it's not giving the right output,maybe because of choice of variable. Can anyone please help me out with this & let me know where I did wrong? I would really appreciate it!
The code & output is attached here. Code: module FT_1(); reg[32:0] upper; reg[16:0] lower; reg[16:0] root; initial begin upper=3; lower=0; root= apu(upper,lower); //$display("The root is: %f",root); end function[32:0] apu; input[16:0] xu; input[16:0] xl; real xm; integer i; begin for(i=0;i<=20;i=i+1) begin xm= (xu+xl)/2.0; //apu=(xu+xl)/2.0; if(((xm*xm)-2)<0) begin xl=xm; end else begin xu=xm; end apu=(xu+xl)/2.0; $display("the root is= %f" ,xm); end end endfunction endmodule Output: # the root is= 1.500000# the root is= 1.000000# the root is= 1.500000# the root is= 1.500000# the root is= 1.500000# the root is= 1.500000# the root is= 1.500000# the root is= 1.500000# the root is= 1.500000# the root is= 1.500000# the root is= 1.500000# the root is= 1.500000# the root is= 1.500000# the root is= 1.500000# the root is= 1.500000# the root is= 1.500000# the root is= 1.500000# the root is= 1.500000# the root is= 1.500000# the root is= 1.500000# the root is= 1.500000Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I'm not a Verilog expert, but when you do xl=xm;
xu=xm;
You convert xm to integers, as xl and xu are integers. I assume this isn't what you wanted.
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page