OpenCores
URL https://opencores.org/ocsvn/soc_maker/soc_maker/trunk

Subversion Repositories soc_maker

[/] [soc_maker/] [trunk/] [spec/] [core_inst_spec.rb] - Diff between revs 5 and 7

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 5 Rev 7
Line 56... Line 56...
 
 
  it "should raise an error, if parameters are given, which doesn't exist in the definition" do
  it "should raise an error, if parameters are given, which doesn't exist in the definition" do
     file = { "file.vhd".to_sym => SOCMaker::HDLFile.new( "./file.vhd" ) }
     file = { "file.vhd".to_sym => SOCMaker::HDLFile.new( "./file.vhd" ) }
     core = SOCMaker::CoreDef.new( "mycore", "rel1", file, "top" )
     core = SOCMaker::CoreDef.new( "mycore", "rel1", file, "top" )
     SOCMaker::lib.add_core( core )
     SOCMaker::lib.add_core( core )
     expect{  SOCMaker::CoreInst.new( "mycorerel1", { "aparameter".to_sym => 4 } ) }.
     expect{
 
         inst = SOCMaker::CoreInst.new( "mycorerel1", { "aparameter".to_sym => 4 } )
 
         inst.consistency_check }.
     to raise_error( SOCMaker::ERR::ValueError )
     to raise_error( SOCMaker::ERR::ValueError )
     SOCMaker::lib.rm_core( core )
     SOCMaker::lib.rm_core( core )
 
 
  end
  end
 
 
Line 72... Line 74...
     core = SOCMaker::CoreDef.new( "mycore", "rel1", file, "top" )
     core = SOCMaker::CoreDef.new( "mycore", "rel1", file, "top" )
     core.inst_parameters = parameters
     core.inst_parameters = parameters
     SOCMaker::lib.add_core( core )
     SOCMaker::lib.add_core( core )
 
 
     inst = SOCMaker::CoreInst.new( "mycorerel1", {}  )
     inst = SOCMaker::CoreInst.new( "mycorerel1", {}  )
 
     inst.consistency_check
     inst.params[ :param1 ].should be == 0
     inst.params[ :param1 ].should be == 0
     SOCMaker::lib.rm_core( core )
     SOCMaker::lib.rm_core( core )
  end
  end
 
 
end
end
 
 
describe SOCMaker::CoreDef, "HDL interaction" do
#describe SOCMaker::CoreDef, "HDL interaction" do
 
 
   it 'should return true and false for implements_port?, when a port is implemented and
#   it 'should return true and false for implements_port?, when a port is implemented and
       not implemented' do
#       not implemented' do
      file       = { "file.vhd".to_sym => SOCMaker::HDLFile.new( "./file.vhd" ) }
#      file       = { "file.vhd".to_sym => SOCMaker::HDLFile.new( "./file.vhd" ) }
      core       = SOCMaker::CoreDef.new( "mycore", "rel1", file, "top" )
#      core       = SOCMaker::CoreDef.new( "mycore", "rel1", file, "top" )
      ifc_spc    = SOCMaker::IfcSpc.new( "a_ifc", "v1", "ports" => { p1: 1, p2: 0 } )
#      ifc_spc    = SOCMaker::IfcSpc.new( "a_ifc", "v1", "ports" => { p1: 1, p2: 0 } )
      ifc        = SOCMaker::IfcDef.new( "a_ifc", "v1", 1, { p1: SOCMaker::IfcPort.new( "p1", 1 ) } )
#      ifc        = SOCMaker::IfcDef.new( "a_ifc", "v1", 1, { p1: SOCMaker::IfcPort.new( "p1", 1 ) } )
      core.interfaces[ :i1 ] = ifc
#      core.interfaces[ :i1 ] = ifc
      SOCMaker::lib.add_core( core )
#      SOCMaker::lib.add_core( core )
      SOCMaker::lib.add_ifc( ifc_spc )
#      SOCMaker::lib.add_ifc( ifc_spc )
 
 
      o1 = SOCMaker::CoreInst.new( "mycorerel1", {}  )
#      o1 = SOCMaker::CoreInst.new( "mycorerel1", {}  )
      o1.implements_port?( 'i1', 'p1' ).should be == true
#      o1.consistency_check
      o1.implements_port?( 'i1', 'p2' ).should be == false
#      o1.implements_port?( 'i1', 'p1' ).should be == true
    end
#      o1.implements_port?( 'i1', 'p2' ).should be == false
end
#    end
 
#end
 
 
describe SOCMaker::CoreDef, "object handling, en-decoding:" do
describe SOCMaker::CoreDef, "object handling, en-decoding:" do
 
 
  it "should be possible to encode and decode a core instance" do
  it "should be possible to encode and decode a core instance" do
    file = { "file.vhd".to_sym => SOCMaker::HDLFile.new( "./file.vhd" ) }
    file = { "file.vhd".to_sym => SOCMaker::HDLFile.new( "./file.vhd" ) }
Line 119... Line 123...
    core = SOCMaker::CoreDef.new( "mycore", "rel1", file, "top" )
    core = SOCMaker::CoreDef.new( "mycore", "rel1", file, "top" )
    core.inst_parameters = parameters
    core.inst_parameters = parameters
    SOCMaker::lib.add_core( core )
    SOCMaker::lib.add_core( core )
 
 
    o1 = SOCMaker::CoreInst.new( "mycorerel1" )
    o1 = SOCMaker::CoreInst.new( "mycorerel1" )
 
    o1.consistency_check
    o2 = Marshal::load(Marshal.dump(o1))
    o2 = Marshal::load(Marshal.dump(o1))
    o2.type << "X"
    o2.type << "X"
    ( o2 == o1 ).should be == false
    ( o2 == o1 ).should be == false
    o2 = Marshal::load(Marshal.dump(o1))
    o2 = Marshal::load(Marshal.dump(o1))
    o2.params[ :param1 ] = 1
    o2.params[ :param1 ] = 1
    ( o2 == o1 ).should be == false
    ( o2 == o1 ).should be == false
  end
  end
 
 
 
 
 
 
 
   it "should create valid vhdl output with our test library" do
 
 
 
     SOCMaker::conf[ :build_dir ] = 'spec/tmp_build2'
 
     SOCMaker::conf[ :hdl_dir   ] = 'b'
 
     coder = SOCMaker::VHDLCoder.new
 
     SOCMaker::lib.refresh( './spec/test_soc_lib' )
 
     soc = SOCMaker::from_f( './spec/test_soc.yaml' );
 
     SOCMaker::lib.add_core( soc )
 
     soc_inst = SOCMaker::CoreInst.new( 'test_socv1' )
 
     soc_inst.consistency_check
 
     soc_inst.gen_toplevel( coder );
 
    #soc.copy_files
 
    #p soc.cons
 
    #puts soc.to_yaml
 
   end
 
 
 
   it "should call coder functions for each core-def. (stub-version)" do
 
 
 
     SOCMaker::lib.clear
 
     soc = SOCMaker::SOCDef.new( "test_soc", "v1", "my_soc_top" )
 
 
 
 
 
     coder = double()
 
 
 
     added_cores = {}
 
     coder.stub( :add_core_component ) do |name_arg, def_arg|
 
       added_cores[ name_arg.to_sym ] = def_arg
 
     end
 
 
 
     added_instances = {}
 
     coder.stub( :add_core_instance ) do |name_arg, inst_arg|
 
       added_instances[ name_arg.to_sym ] = inst_arg
 
     end
 
 
 
     coder.stub( :get_hdl_code ){ |arg_coder| }
 
 
 
     coder.stub( :is_a? ){ SOCMaker::VHDLCoder }
 
 
 
     coder.stub( :filename ){ |x| x + ".vhd" }
 
 
 
 
 
     coder.stub( :add_ifc_connection )
 
 
 
 
 
     added_cons = {}
 
 
 
     dir_path = ""
 
     FileUtils.stub( :mkdir_p ) { |arg| dir_path = arg }
 
     SOCMaker::conf[ :build_dir ] = 'a'
 
     SOCMaker::conf[ :hdl_dir   ] = 'b'
 
     dir_path_ref = "a/b"
 
 
 
 
 
 
 
 
 
     file = { "file.vhd".to_sym => SOCMaker::HDLFile.new( "./file.vhd" ) }
 
     core_a = SOCMaker::CoreDef.new( "core_a", "v1", file, "top" )
 
     core_b = SOCMaker::CoreDef.new( "core_b", "v1", file, "top" )
 
     SOCMaker::lib.add_core( core_a )
 
     SOCMaker::lib.add_core( core_b )
 
 
 
     ifc_spc = SOCMaker::IfcSpc.new( "myifc", "v1", 'ports' => { port_a: 1, port_b: 0 } )
 
     SOCMaker::lib.add_ifc( ifc_spc )
 
     ifc_def_1 = SOCMaker::IfcDef.new( "myifc", "v1", 0, { a: SOCMaker::IfcPort.new( "port_a", 1 ) } )
 
     ifc_def_0 = SOCMaker::IfcDef.new( "myifc", "v1", 1, { b: SOCMaker::IfcPort.new( "port_b", 1 ) } )
 
 
 
 
 
     core_a.interfaces[ :ifc_a ] = ifc_def_0
 
     core_a.interfaces[ :ifc_b ] = ifc_def_1
 
     core_b.interfaces[ :ifc_a ] = ifc_def_0
 
     core_b.interfaces[ :ifc_b ] = ifc_def_1
 
 
 
 
 
     i1 = SOCMaker::CoreInst.new( "core_av1" )
 
     i2 = SOCMaker::CoreInst.new( "core_av1" )
 
     i3 = SOCMaker::CoreInst.new( "core_bv1" )
 
     i4 = SOCMaker::CoreInst.new( "core_bv1" )
 
 
 
     soc.cores[ :inst_a ] = i1
 
     soc.cores[ :inst_b ] = i2
 
     soc.cores[ :inst_c ] = i3
 
     soc.cores[ :inst_d ] = i4
 
     soc.consistency_check
 
     soc.add_connection(  "inst_a", "ifc_a", "inst_b", "ifc_b", "a_new_con" )
 
 
 
 
 
     SOCMaker::lib.add_core( soc )
 
     soc_inst = SOCMaker::CoreInst.new( 'test_socv1' )
 
     soc_inst.consistency_check
 
 
 
     soc_inst.stub( :gen_toplevel_con ) do |name_arg,
 
                                        rule_arg,
 
                                        m0_arg,
 
                                        m1_arg |
 
       added_cons[ name_arg.to_sym ] = { rule: rule_arg,
 
                                         m0: m0_arg, m1: m1_arg }
 
     end
 
 
 
 
 
 
 
     # file writing stub
 
     file_mock = double()
 
     file_mock.stub( :write )
 
     File.should_receive(:open).and_yield(file_mock)
 
 
 
     soc_inst.gen_toplevel( coder );
 
     added_cores.should be == { :core_av1 => core_a, :core_bv1 => core_b }
 
     added_instances.should be == { inst_a: i1, inst_b: i2, inst_c: i3, inst_d: i4 }
 
     added_cons.should be == { a_new_con: { rule: "or", m0: {inst_a: :ifc_a}, m1: {inst_b: :ifc_b } } }
 
     dir_path.should be == dir_path_ref
 
   end
 
 
 
 
end
end
 
 
 
# vim: noai:ts=2:sw=2

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.