Verilog-A模塊之64BIT隨機(jī)序列產(chǎn)生
1bit的隨機(jī)序列產(chǎn)生器可以用ahdl庫(kù)里的rand_bit_stream就可以了
按照ahdl庫(kù)的用法改了一個(gè)64bit的隨機(jī)序列
如果需要產(chǎn)生一個(gè)隨機(jī)電壓,那么只需要在這個(gè)后面接一個(gè)理想DAC即可
代碼如下,當(dāng)作拋磚引玉之作:
(使用時(shí)記得改參數(shù))
`include "discipline.h"
`include "constants.h"
//--------------------
// rand_bit_stream
// -? Random bit steam generator
// vout: [V,A]
// INSTANCE parameters
//? ? tperiod? ? ?= period of stream [s]
//? ? seed? ? ? ? = random number seed []
//? ? vlogic_high = output voltage for high [V]
//? ? vlogic_low? = output voltage for low? [V]
//? ? tdel, trise, tfall = {usual} [s]
// MODEL parameters
//? ? {none}
// This model generates a random steam of bits.
(* instrument_module *)
module RANDOM_64BIT (vout);
output [63:0] vout;
electrical [63:0] vout;
parameter real tperiod = 1 from (0:inf);
parameter integer seed = 21;
parameter real vlogic_high = 1;
parameter real vlogic_low? = 0 ;
parameter real tdel=0 from [0:inf);
parameter real trise=1n;
parameter real tfall=1n;
real next;
integer bit;
real vout_val [0:63];
integer iseed;
genvar i ;
analog begin
? ? @ ( initial_step ) begin
next = $abstime + tperiod;
bit = 0;
iseed = seed;
for(i=0; i<64; i=i+1) begin
? ? ? ? ? ? vout_val[i] = vlogic_low;
? ? ? ? end?
end
? ? $bound_step(tperiod);
? ? @ ( timer( next )) begin
? ? for(i=0; i<64; i=i+1) begin
? ? bit = abs($random(iseed)) & 1;
? ? ? ? ? ? vout_val[i] = (vlogic_high - vlogic_low) * bit + vlogic_low;
? ? ? ? end
? ? ? ? next = next + tperiod;
? ? end
for(i=0; i<64; i=i+1) begin
? ? ? ? V( vout[i] ) <+ transition(vout_val[i],tdel,trise,tfall);
end
end
endmodule