The Designer's Guide Community Forum
https://designers-guide.org/forum/YaBB.pl
Design Languages >> Verilog-AMS >> Verilog-A read bit_vector
https://designers-guide.org/forum/YaBB.pl?num=1224776262

Message started by mitrobgenis on Oct 23rd, 2008, 8:37am

Title: Verilog-A read bit_vector
Post by mitrobgenis on Oct 23rd, 2008, 8:37am

I want to read a binary vector from a txt file or an integer or anything.
Each line has a 32-bit vector.
I use the following code. I want to read one line every clock cycle.
I read successfully one line but I do not manage to read the second line and so on.
I use the following code

analog begin
@(timer(0,period))
fid=$fopen("/home/cadence/dwa.txt","r");
$fscanf(fid,"%d",int_cs[1]);
V(cs) <+ transition(int_cs[1]);
end

Any ideas?

Title: Re: Verilog-A read bit_vector
Post by Geoffrey_Coram on Oct 23rd, 2008, 12:38pm

Shouldn't you do the $fopen on @(initial_step) rather than every time the timer fires??

analog begin

@(initial_step)
 fid=$fopen("/home/cadence/dwa.txt","r");

@(timer(0,period))
 $fscanf(fid,"%d",int_cs[1]);

V(cs) <+ transition(int_cs[1]);

end

Title: Re: Verilog-A read bit_vector
Post by mitrobgenis on Oct 29th, 2008, 2:10am

With the following code I manage to read the dwa.txt  file with this format

1 0 1 1 0 1 0 0 1 1 1 0 0 1 0 1 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1
0 1 1 0 1 0 0 1 1 1 0 0 1 0 1 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 0

`include "constants.vams"
`include "disciplines.vams"

module dwa_hdla(Mclk,cs0,cs1,cs2,cs3,cs4,cs5,cs6,cs7,cs8,cs9,cs10,cs11,cs12,cs13,cs14,cs15,cs16,cs17,cs18,cs19,cs20,cs21,cs22,cs23,cs24,cs25,cs26,cs27,cs28,cs29,cs30,cs31);

input Mclk;
output cs0,cs1,cs2,cs3,cs4,cs5,cs6,cs7,cs8,cs9,cs10,cs11,cs12,cs13,cs14,cs15;
output cs16,cs17,cs18,cs19,cs20,cs21,cs22,cs23,cs24,cs25,cs26,cs27,cs28,cs29,cs30,cs31;

electrical Mclk;
electrical cs0,cs1,cs2,cs3,cs4,cs5,cs6,cs7,cs8,cs9,cs10,cs11,cs12,cs13,cs14,cs15;
electrical cs16,cs17,cs18,cs19,cs20,cs21,cs22,cs23,cs24,cs25,cs26,cs27,cs28,cs29,cs30,cs31;



integer fid;
integer int_cs[31:0];



parameter real vtrans_clk = 1.65;
parameter real delay = 0;
parameter real rise_time = 1n;
parameter real fall_time = 1n;
parameter real period = 200n;


analog begin

@(initial_step)
fid=$fopen("/home/cadence/dwa.txt","r");

//@(timer(0,period))
@ (cross( V(Mclk) - vtrans_clk, +1 ))
begin

$fscanf(fid,"%d",int_cs[0]);
$fscanf(fid,"%d",int_cs[1]);
$fscanf(fid,"%d",int_cs[2]);
$fscanf(fid,"%d",int_cs[3]);
$fscanf(fid,"%d",int_cs[4]);
$fscanf(fid,"%d",int_cs[5]);
$fscanf(fid,"%d",int_cs[6]);
$fscanf(fid,"%d",int_cs[7]);
$fscanf(fid,"%d",int_cs[8]);
$fscanf(fid,"%d",int_cs[9]);
$fscanf(fid,"%d",int_cs[10]);
$fscanf(fid,"%d",int_cs[11]);
$fscanf(fid,"%d",int_cs[12]);
$fscanf(fid,"%d",int_cs[13]);
$fscanf(fid,"%d",int_cs[14]);
$fscanf(fid,"%d",int_cs[15]);
$fscanf(fid,"%d",int_cs[16]);
$fscanf(fid,"%d",int_cs[17]);
$fscanf(fid,"%d",int_cs[18]);
$fscanf(fid,"%d",int_cs[19]);
$fscanf(fid,"%d",int_cs[20]);
$fscanf(fid,"%d",int_cs[21]);
$fscanf(fid,"%d",int_cs[22]);
$fscanf(fid,"%d",int_cs[23]);
$fscanf(fid,"%d",int_cs[24]);
$fscanf(fid,"%d",int_cs[25]);
$fscanf(fid,"%d",int_cs[26]);
$fscanf(fid,"%d",int_cs[27]);
$fscanf(fid,"%d",int_cs[28]);
$fscanf(fid,"%d",int_cs[29]);
$fscanf(fid,"%d",int_cs[30]);
$fscanf(fid,"%d",int_cs[31]);


end
V(cs0)      <+ 3.3*transition(int_cs[0]);
V(cs1)      <+ 3.3*transition(int_cs[1]);
V(cs2)      <+ 3.3*transition(int_cs[2]);
V(cs3)      <+ 3.3*transition(int_cs[3]);
V(cs4)      <+ 3.3*transition(int_cs[4]);
V(cs5)      <+ 3.3*transition(int_cs[5]);
V(cs6)      <+ 3.3*transition(int_cs[6]);
V(cs7)      <+ 3.3*transition(int_cs[7]);
V(cs8)      <+ 3.3*transition(int_cs[8]);
V(cs9)      <+ 3.3*transition(int_cs[9]);
V(cs10)     <+ 3.3*transition(int_cs[10]);
V(cs11)     <+ 3.3*transition(int_cs[11]);
V(cs12)     <+ 3.3*transition(int_cs[12]);
V(cs13)     <+ 3.3*transition(int_cs[13]);
V(cs14)     <+ 3.3*transition(int_cs[14]);
V(cs15)     <+ 3.3*transition(int_cs[15]);
V(cs16)     <+ 3.3*transition(int_cs[16]);
V(cs17)     <+ 3.3*transition(int_cs[17]);
V(cs18)     <+ 3.3*transition(int_cs[18]);
V(cs19)     <+ 3.3*transition(int_cs[19]);
V(cs20)     <+ 3.3*transition(int_cs[20]);
V(cs21)     <+ 3.3*transition(int_cs[21]);
V(cs22)     <+ 3.3*transition(int_cs[22]);
V(cs23)     <+ 3.3*transition(int_cs[23]);
V(cs24)     <+ 3.3*transition(int_cs[24]);
V(cs25)     <+ 3.3*transition(int_cs[25]);
V(cs26)     <+ 3.3*transition(int_cs[26]);
V(cs27)     <+ 3.3*transition(int_cs[27]);
V(cs28)     <+ 3.3*transition(int_cs[28]);
V(cs29)     <+ 3.3*transition(int_cs[29]);
V(cs30)     <+ 3.3*transition(int_cs[30]);
V(cs31)     <+ 3.3*transition(int_cs[31]);
end


endmodule



Title: Re: Verilog-A read bit_vector
Post by mitrobgenis on Oct 29th, 2008, 3:09am

A little bit better....

// VerilogA for dmitrovgenis_lib, dwa_hdla, veriloga

`include "constants.vams"
`include "disciplines.vams"

module dwa_hdla(Mclk,cs);

input Mclk;
output [31:0] cs;

electrical Mclk;
electrical [31:0] cs;

integer fid;
integer int_cs[31:0];
integer j;

parameter real vtrans_clk = 1.65;
parameter real delay = 0;
parameter real rise_time = 1n;
parameter real fall_time = 1n;
parameter real period = 200n;

analog begin

@(initial_step)
fid=$fopen("/home/cadence/dwa.txt","r");

@ (cross( V(Mclk) - vtrans_clk, +1 ))
begin
for (j=0;j<32;j=j+1)
begin
$fscanf(fid,"%d",int_cs[j]);
end
end

generate i (31,0) begin
V(cs[i])      <+ 3.3*transition(int_cs[i]);
end

end

endmodule

Title: Re: Verilog-A read bit_vector
Post by jbdavid on Oct 29th, 2008, 10:02am

that second version does look a lot better..

The Designer's Guide Community Forum » Powered by YaBB 2.2.2!
YaBB © 2000-2008. All Rights Reserved.