class Axi4IllegalBFM
Public Instance Methods
exec(str=nil) { |self| ... }
click to toggle source
# File lib/tdl/bfm/axi4_illegal_bfm.rb, line 78 def exec(str=nil) if block_given? ystr = yield(self) str = str.to_s + ystr end @_master_draw_exec_str_ << init_tap_draw("#{str.to_s};\n") end
init_exec(str)
click to toggle source
# File lib/tdl/bfm/axi4_illegal_bfm.rb, line 86 def init_exec(str) @_init_master_draw_exec_str_ ||= [] @_init_master_draw_exec_str_ << init_tap_draw("#{str.to_s};\n") end
masterbfm(info:true,wdata_name:"wdata_queue") { |self| ... }
click to toggle source
# File lib/tdl/bfm/axi4_illegal_bfm.rb, line 26 def masterbfm(info:true,wdata_name:"wdata_queue",&block) import_axibfm_pkg @wdata_name = wdata_name @_init_tap_cnt_ ||= 1 @_master_draw_exec_str_ ||= [] @_init_master_draw_exec_str_ ||= [] # define_singleton_method(:wdata_queue) do # "wdata_queue" # end yield self if info info_str = "ON" else info_str = "OFF" end belong_to_module.Axi4_draw << masterbfm_draw(info:info_str) return self end
masterbfm_draw(info:"OFF")
click to toggle source
def self.MasterBFM()
end
# File lib/tdl/bfm/axi4_illegal_bfm.rb, line 52 def masterbfm_draw(info:"OFF") init_str = @_init_master_draw_exec_str_.join("") master_str = @_master_draw_exec_str_.join("") " Axi4IllMasterBfm_c #( .IDSIZE (#{@idsize}), .ASIZE (#{@asize}), .LSIZE (#{@lsize}), .DSIZE (#{@dsize}), .MSG (\"#{info}\"), .ADDR_STEP (#{@addr_step.to_i}) ) MasterIllBfm_#{signal}; initial begin:#{signal}_MASTER_ILLEGAL_BLOCK logic [#{@dsize}-1:0] #{@wdata_name} [$]; axi4_illegal_s illegal_s; MasterIllBfm_#{signal} = new(#{signal}); MasterIllBfm_#{signal}.init(); #{init_str} wait(#{signal}.axi_aresetn); #{master_str} end " end
read_burst(addr:0,len:0,rate:100,aw_off:false,last_off:false,ar_off:false,offset_len:0,data: :random)
click to toggle source
# File lib/tdl/bfm/axi4_illegal_bfm.rb, line 157 def read_burst(addr:0,len:0,rate:100,aw_off:false,last_off:false,ar_off:false,offset_len:0,data: :random) f_to_bit = Proc.new do |v| if v 1 else 0 end end if data == :random data_str = %Q{ for(int i = 0;i<#{len};i++)begin #{@wdata_name}[i] = $urandom_range(0,#{len}); end} elsif data == :range data_str = %Q{ for(int i = 0;i<#{len};i++)begin #{@wdata_name}[i] = i; end} else data_str = %Q{ for(int i = 0;i<#{len};i++)begin #{@wdata_name}[i] = #{data.to_s}; end} end @_master_draw_exec_str_ << %Q{ //--->> RESET STRICT <<-------------- illegal_s.aw_off = #{f_to_bit.call(aw_off)}; illegal_s.ar_off = #{f_to_bit.call(ar_off)}; illegal_s.last_off = #{f_to_bit.call(last_off)}; illegal_s.offset_len = #{offset_len}; //---<< RESET STRICT >>-------------- //--->> rdata data generate <<------- #{data_str} //---<< rdata data generate >>------- } @_master_draw_exec_str_ << init_tap_draw("MasterIllBfm_#{signal}.read_burst(#{addr},#{len},#{rate},#{@wdata_name});\n") end
repeat(num=nil) { |self| ... }
click to toggle source
def stream_exec(delay:“#(10us)”,str:“”)
@_master_draw_exec_str_ << "#(100ns) wdata_queue = #{str.to_s};\n"
end
# File lib/tdl/bfm/axi4_illegal_bfm.rb, line 95 def repeat(num=nil,&block) if num @_master_draw_exec_str_ << init_tap_draw("repeat(#{num}) begin\n") else @_master_draw_exec_str_ << init_tap_draw("forever begin\n") end @_init_tap_cnt_ += 1 yield self @_init_tap_cnt_ -= 1 @_master_draw_exec_str_ << init_tap_draw("end\n") end
wait(s,edge=nil)
click to toggle source
# File lib/tdl/bfm/axi4_illegal_bfm.rb, line 107 def wait(s,edge=nil) if edge.nil? @_master_draw_exec_str_ << init_tap_draw("wait(#{align_signal(s,q_mark=false)});\n") elsif edge.to_s.eql? "raising" @_master_draw_exec_str_ << init_tap_draw("@(posedge #{align_signal(s)});\n") elsif edge.to_s.eql? "falling" @_master_draw_exec_str_ << init_tap_draw("@(negedge #{align_signal(s)});\n") end end
write_burst(addr:0,len:0,rate:100,aw_off:false,last_off:false,ar_off:false,offset_len:0,data: :random)
click to toggle source
# File lib/tdl/bfm/axi4_illegal_bfm.rb, line 117 def write_burst(addr:0,len:0,rate:100,aw_off:false,last_off:false,ar_off:false,offset_len:0,data: :random) f_to_bit = Proc.new do |v| if v 1 else 0 end end if data == :random data_str = %Q{ for(int i = 0;i<#{len};i++)begin #{@wdata_name}[i] = $urandom_range(0,#{len}); end} elsif data == :range data_str = %Q{ for(int i = 0;i<#{len};i++)begin #{@wdata_name}[i] = i; end} else data_str = %Q{ for(int i = 0;i<#{len};i++)begin #{@wdata_name}[i] = #{data.to_s}; end} end @_master_draw_exec_str_ << %Q{ //--->> RESET STRICT <<-------------- illegal_s.aw_off = #{f_to_bit.call(aw_off)}; illegal_s.ar_off = #{f_to_bit.call(ar_off)}; illegal_s.last_off = #{f_to_bit.call(last_off)}; illegal_s.offset_len = #{offset_len}; //---<< RESET STRICT >>-------------- //--->> wdata data generate <<------- #{data_str} //---<< wdata data generate >>------- } @_master_draw_exec_str_ << init_tap_draw("MasterIllBfm_#{signal}.write_burst(illegal_s,#{addr},#{len},#{rate},#{@wdata_name});\n") end
Private Instance Methods
import_axibfm_pkg()
click to toggle source
# File lib/tdl/bfm/axi4_illegal_bfm.rb, line 17 def import_axibfm_pkg unless $__AXI_ILL_BFM_IMPORT__ import_str = "import AxiIllegalBfmPkg::*;\n" belong_to_module.ex_up_code = import_str.concat belong_to_module.ex_up_code.to_s $__AXI_ILL_BFM_IMPORT__ = true end end
init_tap_draw(str)
click to toggle source
# File lib/tdl/bfm/axi4_illegal_bfm.rb, line 199 def init_tap_draw(str) "#{" "*@_init_tap_cnt_}#{str.to_s}" end