tag 标签: 仿真

相关帖子
相关博文
  • 热度 2
    2019-10-6 20:58
    483 次阅读|
    1 个评论
    下载链接:https://pan.baidu.com/s/1E3d-7gOlbLES117GC54-5Q 提取码:w9xv ​
  • 热度 8
    2019-8-8 15:19
    1278 次阅读|
    0 个评论
    创建PCIe空间映射子函数
    BAR初始化第一步,即BAR_SCAN子函数了解完了,下面我们了解初始化第二步,即TSK_BUILD_PCIE_MAP函数。再次复习下BAR初始化步骤( 在TSK_BAT_INIT任务里面其实是在模拟BIOS和驱动程序的操作,首先会对BAR寄存器进行赋值,然后会对BAR指向的设备内存进行IO或者mem映射,最后就是对设备的配置寄存器的参数写入。 ): /************************************************************ Task : TSK_BAR_INIT Inputs : None Outputs : None Description : Initialize PCI core based on core's configuration. *************************************************************/ task TSK_BAR_INIT; begin TSK_BAR_SCAN; TSK_BUILD_PCIE_MAP; TSK_DISPLAY_PCIE_MAP; TSK_BAR_PROGRAM; end endtask // TSK_BAR_INIT TSK_BUILD_PCIE_MAP源代码有点长,这里就不贴了。其主要目的就是执行存储器或I/O映射算法,并依据Endpoint需求分配Memory 32、Memory 64和I/O空间。具体来说,就是根据上一步 TSK_BAR_SCAN得到的各个BAR的range变量,检查这些range,根据检查结果,判断每个BAR是否被使能、及其对应的映射结果(是MEM32啊还是MEM64啊,或者是I/O空间)。仿真的时候会将检查结果打印如下: 注 :函数 TSK_BUILD_PCIE_MAP在检查正常的时候只会打印上图中的第一句;下面每个BAR空间的检查结果,是在调用函数TSK_DISPLAY_PCIE_MAP的时候打印的。 BAR空间初始化最后一步,看似就是将之前读回的BAR状态重新使用Type0配置写再写回去( 这里应该对应应用程序里的BAR空间基地址的产生,电脑开机扫描获取PCIe的各个BAR的信息,为它们分配地址空间,这里的Program应该是将分配好的地址空间基地址重新写回到BAR寄存器 ),比如对BAR0的写: // Program BAR0 TSK_TX_TYPE0_CONFIGURATION_WRITE(DEFAULT_TAG, 12'h10, BAR_INIT_P_BAR , 4'hF); DEFAULT_TAG = DEFAULT_TAG + 1; TSK_TX_CLK_EAT(100); 这个子函数还对其它BAR空间进行Type0配置写,个人觉得,其它BAR空间都Disable了,写不写都无所谓。值得注意的时候,该子函数最后还对PCI命令寄存器和PCIe器件控制寄存器进行了编程: // Program PCI Command Register TSK_TX_TYPE0_CONFIGURATION_WRITE(DEFAULT_TAG, 12'h04, 32'h00000003, 4'h1); DEFAULT_TAG = DEFAULT_TAG + 1; TSK_TX_CLK_EAT(100); // Program PCIe Device Control Register TSK_TX_TYPE0_CONFIGURATION_WRITE(DEFAULT_TAG, 12'h68, 32'h0000005f, 4'h1); DEFAULT_TAG = DEFAULT_TAG + 1; TSK_TX_CLK_EAT(1000); 注意上述两次写和BAR0写的区别,比如最后一个参数为4‘h1,则表示只有最低字节被Enable了,即只需传递低8位即可。 了解完BAR空间的初始化,后面开始了解正常的PIO仿真,即存储器写和存储器读。
  • 热度 4
    2019-8-8 14:46
    909 次阅读|
    0 个评论
    Type0配置写函数
    在前面了解PCI配置空间、TLP以及Type0配置读的基础上,本文介绍Type0配置写子函数。该子函数产生一个Type0配置写TLP,先来看具体代码: /************************************************************ Task : TSK_TX_TYPE0_CONFIGURATION_WRITE Inputs : Tag, PCI/PCI-Express Reg Address, First BypeEn Outputs : Transaction Tx Interface Signaling Description : Generates a Type 0 Configuration Write TLP *************************************************************/ task TSK_TX_TYPE0_CONFIGURATION_WRITE; input tag_; input reg_addr_; input reg_data_; input first_dw_be_; begin if (trn_lnk_up_n) begin $display(" : Trn interface is MIA", $realtime); $finish(1); end TSK_TX_SYNCHRONIZE(0, 0, 0); trn_td <= #(Tcq) { 1'b0, 2'b10, 5'b00100, 1'b0, 3'b000, 4'b0000, 1'b0, 1'b0, 2'b00, 2'b00, 10'b0000000001, // 32 COMPLETER_ID_CFG, tag_, 4'b0000, first_dw_be_, // 64 COMPLETER_ID_CFG, 4'b0000, reg_addr_ , 2'b00, // 32 reg_data_ , reg_data_ , reg_data_ , reg_data_ // 64 }; trn_tsof_n <= #(Tcq) 0; trn_teof_n <= #(Tcq) 0; trn_trem_n <= #(Tcq) 2'b00; trn_tsrc_rdy_n <= #(Tcq) 0 ; TSK_TX_SYNCHRONIZE(1, 1, 1); trn_tsof_n <= #(Tcq) 1; trn_teof_n <= #(Tcq) 1; trn_trem_n <= #(Tcq) 2'b00; trn_tsrc_rdy_n <= #(Tcq) 1; end endtask // TSK_TX_TYPE0_CONFIGURATION_WRITE 有了对Type0配置读的了解,那么理解上面的代码就容易很多了,TLP前面32bit和配置读一样,唯一的区别在于TLP最后32bit带了1DW的写数据。写数据通过函数第三个参数调用的时候引入。 需要注意的是,上述代码中两次调用了函数 TSK_TX_SYNCHRONIZE,第一次调用( TSK_TX_SYNCHRONIZE(0, 0, 0); ),只是为了同步trn_clk和trn_tdst_rdyn_n,之后TLP信息被赋值给trn_td。第二次调用( TSK_TX_SYNCHRONIZE(1, 1, 1); )是为了同步信号,也是为了将TLP信息添加到本地buffer,并最终发送到输出log。也就是说,我们在仿真的时候看到很多下图所示的信息都是第二次调用函数 TSK_TX_SYNCHRONIZE的时候处理,第二次调用除了在仿真的时候的打印输出下图所示的信息外,还将TLP信息Log到输出文件(tx.dat和rx.dat) 这里有个疑问是在TSK_BAR_SCAN函数中,对每个BAR先使用Type配置写,写入的数据是”P_ADDRESS_MASK = 32'hffff_ffff;“,源代码给出的注释是对BAR空间写PCI_MASK来找到range。接着使用Type0配置读刚刚被写入MASK值的BAR空间,读回的数据保存在BAR_INIT_P_BAR_RANGE 里,也就是所谓“ 找到range ”。我的问题是,为什么对BAR空间写入MASK后,再对其进行type0读就可以得到range?
  • 热度 4
    2019-8-7 13:38
    2431 次阅读|
    2 个评论
    Xilinx的PCIe仿真模型学习
    使用Xilinx的PCIe的时候,例化示例都会自动生成仿真模型,同时官网提供的基于xapp1052的参考设计,也同时提供仿真BMD的仿真模型。即所谓的下行端口模型(downstream port model),所以PCIe例化之后产生的参考设计都会自动生成一个dsport的模型文件,让用户可以以此模拟一个root端口来测试其endpoint端口。下图给出了下行端口模型的结构框图: 图1:DS端口模型结构框图 当然,上图是仿真endpoint的模型,而且大部分用户都是实例化endpoint,如果是设计root端口的话,可以忽略本文。以下描述都是基于使用endpoint。用户例化的PCIe核可是视为EP,上图DS模型就是RP,仿真顶层还需要一个Testbench将RP和EP包裹起来,所有这些文件在PCIe核例化的时候自动产生,具体位置(这里以xapp1052为例)为: 图2:仿真文件存放位置 如图2所示,dsport文件夹存放都是图1灰色框部分文件,functional文件夹存放的是Testbench顶层以及系统时钟和复位生成文件,而tests文件夹则存放了用户层测试激励(体现与图1右侧的“Test Program”),这些激励都是usrapp_tx发起。下面会试着详细介绍图1中的几个灰框里的文件,主要是usr_app_rx和usr_app_tx以及Test Program。 dsport(downstream port) 这个模块主要实现root complex,Xilinx一直强调这个模块不能看成是严格的root complex,因为它并不能提供真正root complex提供的很多特性,只是方便用户仿真而创建的模型。用户侧的endpoint经PCIe链路发送TLP到下行端口(downstream port)模型。 xapp1052里实现dsport的源文件主要应该是xilinx_pcie_2_1_rport_7x.v,pcie_2_1_rport_7x.v,而文件pci_exp_usrapp_cfg.v用来对DS模型进行配置。 RX_APP(pci_exp_usrapp_rx.v) 在RX_APP可能主要定义了解析接收用户接口状态机。该状态机的状态变量如下: /* State variables */ `define TRN_RX_RESET 5'b00001 `define TRN_RX_DOWN 5'b00010 `define TRN_RX_IDLE 5'b00100 `define TRN_RX_ACTIVE 5'b01000 `define TRN_RX_SRC_DSC 5'b10000 TX_APP(pci_exp_usrapp_tx.v) usrapp_tx为PCIe链路两端的数据传输,发送TLP到dsport模块。包解析或测试程序由usrapp_tx启动,用于仿真endpoint接口。所有测试程序都是实现定义好的,存放在上述tests文件夹下的文件之中(tests.vh)。在usrapp_tx源文件中直接调用tests.vh //Test starts here if (testname == "dummy_test") begin $display(" %m: Invalid TESTNAME: %0s", $realtime, testname); $finish(2); end `include "tests.vh" else begin $display(" %m: Error: Unrecognized TESTNAME: %0s", $realtime, testname); $finish(2); end 而在tests.vh文件中则通过include语句将存放测试程序的源文件包括进来,Xilinx提供很多事先定义好的测试程序,但是在xapp1052示例中的sample_tests1.vh仅提供了三个测试程序,它们分别是sample_smoke_test0,sample_smoke_test1以及pio_writeReadBack_test0。 sample_smoke_test0发起一个PCI Type0配置读TLP,并等待完成TLP;然后将返回值与预期的器件ID和供应商ID进行比较。 sample_smoke_test1执行和 sample_smoke_test0一样的操作,但是使用了可预期任务程序。这个测试使用了两个独立的测试程序线程:一个线程发送PCI Type0配置读TLP,第二个线程提交一个带数据的完成报文TLP可预期任务。这个测试展示了使用可预期任务实现并行测试的结构。该测试可以用于确认从用户设计收到的任何TLP,也可以在当顺序不重要时确认收到的TLP。 pio_writeReadBack_test0测试程序先发送一个单DW写TLP,然后发送一个单DW读TLP;然后等待完成报文TLP,并验证读写数据是否一致。 不管测试程序要实现怎样的功能,都大致分为以下6个步骤: 执行条件比较特定的测试名称(比如确认当前测试是不是 pio_writeReadBack_test0?或其它测试) 设置仿真退出时间,防止仿真进挂起 等待正常复位,以及链路链接(link-up) 初始化endpoint配置空间 在DS端口模型和endpoint直接发送和接收TLP 验证测试是否成功 pio_writeReadBack_test0 本节来看看 pio_writeReadBack_test0测试程序里的具体代码 else if(testname == "pio_writeReadBack_test0") begin // This test performs a 32 bit write to a 32 bit Memory space and performs a read back //board.RP.tx_usrapp.TSK_SIMULATION_TIMEOUT(10050); board.RP.tx_usrapp.TSK_SIMULATION_TIMEOUT(20050); board.RP.tx_usrapp.TSK_SYSTEM_INITIALIZATION; board.RP.tx_usrapp.TSK_BAR_INIT; //-------------------------------------------------------------------------- // Event : Testing BARs //-------------------------------------------------------------------------- for (board.RP.tx_usrapp.ii = 0; board.RP.tx_usrapp.ii <= 6; board.RP.tx_usrapp.ii = board.RP.tx_usrapp.ii + 1) begin 2'b00) // bar is enabled case(board.RP.tx_usrapp.BAR_INIT_P_BAR_ENABLED ) 2'b01 : // IO SPACE begin $display(" : Transmitting TLPs to IO Space BAR %x", $realtime, board.RP.tx_usrapp.ii); //-------------------------------------------------------------------------- // Event : IO Write bit TLP //-------------------------------------------------------------------------- board.RP.tx_usrapp.TSK_TX_IO_WRITE(board.RP.tx_usrapp.DEFAULT_TAG, board.RP.tx_usrapp.BAR_INIT_P_BAR , 4'hF, 32'hdead_beef); board.RP.com_usrapp.TSK_EXPECT_CPL(3'h0, 1'b0, 1'b0, 2'b0, board.RP.tx_usrapp.COMPLETER_ID_CFG, 3'h0, 1'b0, 12'h4, board.RP.tx_usrapp.COMPLETER_ID_CFG, board.RP.tx_usrapp.DEFAULT_TAG, board.RP.tx_usrapp.BAR_INIT_P_BAR , test_vars ); board.RP.tx_usrapp.TSK_TX_CLK_EAT(10); board.RP.tx_usrapp.DEFAULT_TAG = board.RP.tx_usrapp.DEFAULT_TAG + 1; //-------------------------------------------------------------------------- // Event : IO Read bit TLP //-------------------------------------------------------------------------- // make sure P_READ_DATA has known initial value board.RP.tx_usrapp.P_READ_DATA = 32'hffff_ffff; fork board.RP.tx_usrapp.TSK_TX_IO_READ(board.RP.tx_usrapp.DEFAULT_TAG, board.RP.tx_usrapp.BAR_INIT_P_BAR , 4'hF); board.RP.tx_usrapp.TSK_WAIT_FOR_READ_DATA; join if (board.RP.tx_usrapp.P_READ_DATA != 32'hdead_beef) begin $display(" : Test FAILED --- Data Error Mismatch, Write Data %x != Read Data %x", $realtime, 32'hdead_beef, board.RP.tx_usrapp.P_READ_DATA); test_failed_flag = 1; end else begin $display(" : Test PASSED --- Write Data: %x successfully received", $realtime, board.RP.tx_usrapp.P_READ_DATA); end board.RP.tx_usrapp.TSK_TX_CLK_EAT(10); board.RP.tx_usrapp.DEFAULT_TAG = board.RP.tx_usrapp.DEFAULT_TAG + 1; end 2'b10 : // MEM 32 SPACE begin $display(" : Transmitting TLPs to Memory 32 Space BAR %x", $realtime, board.RP.tx_usrapp.ii); //-------------------------------------------------------------------------- // Event : Memory Write 32 bit TLP //-------------------------------------------------------------------------- board.RP.tx_usrapp.DATA_STORE = 8'h04; board.RP.tx_usrapp.DATA_STORE = 8'h03; board.RP.tx_usrapp.DATA_STORE = 8'h02; board.RP.tx_usrapp.DATA_STORE = 8'h01; board.RP.tx_usrapp.TSK_TX_MEMORY_WRITE_32(board.RP.tx_usrapp.DEFAULT_TAG, board.RP.tx_usrapp.DEFAULT_TC, 10'd1, // board.RP.tx_usrapp.BAR_INIT_P_BAR +8'h10, 4'h0, 4'hF, 1'b0);//Modified By Jerry board.RP.tx_usrapp.BAR_INIT_P_BAR +8'h08, 4'h0, 4'hF, 1'b0); board.RP.tx_usrapp.TSK_TX_CLK_EAT(10); board.RP.tx_usrapp.DEFAULT_TAG = board.RP.tx_usrapp.DEFAULT_TAG + 1; //-------------------------------------------------------------------------- // Event : Memory Read 32 bit TLP //-------------------------------------------------------------------------- // make sure P_READ_DATA has known initial value board.RP.tx_usrapp.P_READ_DATA = 32'hffff_ffff; fork board.RP.tx_usrapp.TSK_TX_MEMORY_READ_32(board.RP.tx_usrapp.DEFAULT_TAG, board.RP.tx_usrapp.DEFAULT_TC, 10'd1, //board.RP.tx_usrapp.BAR_INIT_P_BAR +8'h10, 4'h0, 4'hF);//Modified by Jerry board.RP.tx_usrapp.BAR_INIT_P_BAR +8'h08, 4'h0, 4'hF); board.RP.tx_usrapp.TSK_WAIT_FOR_READ_DATA; join if (board.RP.tx_usrapp.P_READ_DATA != {board.RP.tx_usrapp.DATA_STORE , board.RP.tx_usrapp.DATA_STORE , board.RP.tx_usrapp.DATA_STORE , board.RP.tx_usrapp.DATA_STORE }) begin $display(" : Test FAILED --- Data Error Mismatch, Write Data %x != Read Data %x", $realtime, {board.RP.tx_usrapp.DATA_STORE ,board.RP.tx_usrapp.DATA_STORE , board.RP.tx_usrapp.DATA_STORE ,board.RP.tx_usrapp.DATA_STORE }, board.RP.tx_usrapp.P_READ_DATA); test_failed_flag = 1; end else begin $display(" : Test PASSED --- Write Data: %x successfully received", $realtime, board.RP.tx_usrapp.P_READ_DATA); end board.RP.tx_usrapp.TSK_TX_CLK_EAT(10); board.RP.tx_usrapp.DEFAULT_TAG = board.RP.tx_usrapp.DEFAULT_TAG + 1; end 2'b11 : // MEM 64 SPACE begin $display(" : Transmitting TLPs to Memory 64 Space BAR %x", $realtime, board.RP.tx_usrapp.ii); //-------------------------------------------------------------------------- // Event : Memory Write 64 bit TLP //-------------------------------------------------------------------------- board.RP.tx_usrapp.DATA_STORE = 8'h64; board.RP.tx_usrapp.DATA_STORE = 8'h63; board.RP.tx_usrapp.DATA_STORE = 8'h62; board.RP.tx_usrapp.DATA_STORE = 8'h61; board.RP.tx_usrapp.TSK_TX_MEMORY_WRITE_64(board.RP.tx_usrapp.DEFAULT_TAG, board.RP.tx_usrapp.DEFAULT_TC, 10'd1, {board.RP.tx_usrapp.BAR_INIT_P_BAR , board.RP.tx_usrapp.BAR_INIT_P_BAR +8'h20}, 4'h0, 4'hF, 1'b0); board.RP.tx_usrapp.TSK_TX_CLK_EAT(10); board.RP.tx_usrapp.DEFAULT_TAG = board.RP.tx_usrapp.DEFAULT_TAG + 1; //-------------------------------------------------------------------------- // Event : Memory Read 64 bit TLP //-------------------------------------------------------------------------- // make sure P_READ_DATA has known initial value board.RP.tx_usrapp.P_READ_DATA = 32'hffff_ffff; fork board.RP.tx_usrapp.TSK_TX_MEMORY_READ_64(board.RP.tx_usrapp.DEFAULT_TAG, board.RP.tx_usrapp.DEFAULT_TC, 10'd1, {board.RP.tx_usrapp.BAR_INIT_P_BAR , board.RP.tx_usrapp.BAR_INIT_P_BAR +8'h20}, 4'h0, 4'hF); board.RP.tx_usrapp.TSK_WAIT_FOR_READ_DATA; join if (board.RP.tx_usrapp.P_READ_DATA != {board.RP.tx_usrapp.DATA_STORE , board.RP.tx_usrapp.DATA_STORE , board.RP.tx_usrapp.DATA_STORE , board.RP.tx_usrapp.DATA_STORE }) begin $display(" : Test FAILED --- Data Error Mismatch, Write Data %x != Read Data %x", $realtime, {board.RP.tx_usrapp.DATA_STORE , board.RP.tx_usrapp.DATA_STORE , board.RP.tx_usrapp.DATA_STORE , board.RP.tx_usrapp.DATA_STORE }, board.RP.tx_usrapp.P_READ_DATA); test_failed_flag = 1; end else begin $display(" : Test PASSED --- Write Data: %x successfully received", $realtime, board.RP.tx_usrapp.P_READ_DATA); end board.RP.tx_usrapp.TSK_TX_CLK_EAT(10); board.RP.tx_usrapp.DEFAULT_TAG = board.RP.tx_usrapp.DEFAULT_TAG + 1; end default : $display("Error case in usrapp_tx\n"); endcase end $display(" : Finished transmission of PCI-Express TLPs", $realtime); if (!test_failed_flag) begin $display ("Test Completed Successfully"); end $finish; end board.RP.tx_usrapp.TSK_SIMULATION_TIMEOUT(10050); 这一句设置了仿真推出的时间 board.RP.tx_usrapp.TSK_SYSTEM_INITIALIZATION; 这个函数让测试程序等待系统复位被释放,同时endpoint的trn_lnk_up_n信号被置位。这样就表示endpoint已经准备好通过DS端口模型被测试程序配置。 board.RP.tx_usrapp.TSK_BAR_INIT; 执行一系列对endpoint核PCI配置空间进行Type0 配置写和读,确认endpoint的存储器和IO需求,然后对endpoint的基地址寄存器(BARs)进行编程,这样确保可以从DS端口模型介绍TLP。 其实BARs空间初始化任务里同时调用了其它几个任务子程序: /************************************************************ Task : TSK_BAR_INIT Inputs : None Outputs : None Description : Initialize PCI core based on core's configuration. *************************************************************/ task TSK_BAR_INIT; begin TSK_BAR_SCAN; TSK_BUILD_PCIE_MAP; TSK_DISPLAY_PCIE_MAP; TSK_BAR_PROGRAM; end endtask // TSK_BAR_INIT 首先我们来看子程序TSK_BAR_SCAN,该子程序对6个Bar和一个扩展ROM Bar通过Type0配置读写进行配置,下面列出了BAR0的配置读写: // Determine Range for BAR0 TSK_TX_TYPE0_CONFIGURATION_WRITE(DEFAULT_TAG, 12'h10, P_ADDRESS_MASK, 4'hF); DEFAULT_TAG = DEFAULT_TAG + 1; TSK_TX_CLK_EAT(100); // Read BAR0 Range TSK_TX_TYPE0_CONFIGURATION_READ(DEFAULT_TAG, 12'h10, 4'hF); DEFAULT_TAG = DEFAULT_TAG + 1; TSK_WAIT_FOR_READ_DATA; BAR_INIT_P_BAR_RANGE = P_READ_DATA; 具体仿真结果是: 图3: TSK_TX_SYNCHRONIZE 这个子程序的主要功能是同步trn_clk和trn_tdst_rdy_n信号。当一个TLP被发送之前,必须等待trn_clk的上升沿和 trn_tdst_rdy_n被置位。在这个子程序之中调用了子程序TSK_READ_DATA_128和TSK_PARSE_FRAME,主要用意是输出log信息到tx.dat文件中。
  • 热度 2
    2019-8-5 16:49
    1218 次阅读|
    0 个评论
    仿真Xilinx的PCIe时使用pio_writeReadBack_test0测试问题分析
    Xilinx的参考设计仿真给出RP模型下3个测试函数,前两个仿真都通过,只有pio_writeReadBack_test0测试默认的MEM32写和读回的时候,写入和读回的数据不匹配,写入32b'04030201,读回来的却是32b'04030200。 如上图所示,RP发送32b'01020304到EP,并读回,EP也能正确收到该值。然后,在EP返回的时候,却变成了32b’04030200(注:自己颠倒是正常了,问题出在字节“01”变成了“00”)。如下图所示,RP确实收到是32b'00020304。 这个问题最终的解决,可以参考博文https://mbb.eet-china.com/blog/1010859-407798.html,在比较BMD128和BMD64的时候,发现相同MEM32写+读回操作,Xilinx给出的基于K7系列参考设计测试激励发送的addr_i是“4”,而在BMD64模式下,该值是“2”。请对照上述博文中128与64位的仿真时序图查找addr_i值,这个参数在BMD_EP_MEM.v中用于解码不同的功能,在“2”时,对应MEM32写的值直接赋值到MEM32读的数据,所以如此仿真才会Test Passed,写入和读回的值相同。 我是修改测试激励中读写操作对应参数,使得addr_i得到一个“2”,问题是该测试激励是一直继承下来,根本解决方法应该不是修改测试激励,这个需要Xilinx给出答复。具体修改如下,一共需要修改2处,分别是MEM32写和MEM读,将“+8‘h10”修改为“+8’h08” //board.RP.tx_usrapp.BAR_INIT_P_BAR +8'h10, 4'h0, 4'hF);//Modified by Jerry board.RP.tx_usrapp.BAR_INIT_P_BAR +8'h08, 4'h0, 4'hF);
相关资源
  • 所需E币: 1
    时间: 4 天前
    大小: 3.88MB
    上传者: 蔚蔚
    对称带状线、非对称带状线、渐变耦合带状线、微带线等各类传输线的CST模拟仿真方法。
  • 所需E币: 1
    时间: 6 天前
    大小: 416.83KB
    上传者: sense1999
    神奇!C语言还可以这样用来仿真
  • 所需E币: 1
    时间: 7 天前
    大小: 14.19MB
    上传者: sense1999
    可调直流稳压电源原理图及仿真
  • 所需E币: 1
    时间: 6 天前
    大小: 1.14MB
    上传者: sense1999
    直流稳压电源仿真实训
  • 所需E币: 1
    时间: 2020-11-19 15:17
    大小: 4.91MB
    上传者: zendy_731593397
    中兴仿真分册中兴仿真分册
  • 所需E币: 4
    时间: 2020-11-18 19:29
    大小: 9.12MB
    上传者: xgp416
    ADS实验的建立原理图、仿真控件、仿真资源大小:9.12MB[摘要]概 要 该实验包括用户基础界面,ADS文件的创建过程包括建立原理图、仿真控件、仿真、和数据显示等部分的内容。该实验还包括调谐与谐波平衡法仿真的一个简单例子。 目 标 z建立一个新的项目和原理图设计 
  • 所需E币: 4
    时间: 2020-11-18 19:30
    大小: 11.12MB
    上传者: xgp416
    Cadencencsim仿真手册资源大小:11.12MB[摘要]本机编译代码(NCC)是一种软件执行技术,它为模拟性能瓶颈提供了高性能的mance解决方案。
  • 所需E币: 0
    时间: 2020-11-18 20:08
    大小: 1.96MB
    上传者: czd886
    飞机电源系统的建模与仿真
  • 所需E币: 0
    时间: 2020-11-18 20:10
    大小: 1.81MB
    上传者: czd886
    复合储能型保安电源系统控制策略与仿真
  • 所需E币: 0
    时间: 2020-11-18 20:10
    大小: 8.39MB
    上传者: czd886
    复合储能型保安电源系统控制策略与仿真
  • 所需E币: 0
    时间: 2020-11-18 20:22
    大小: 1.17MB
    上传者: czd886
    混合动力装甲车复合电源负载功率控制与仿真
  • 所需E币: 0
    时间: 2020-11-18 20:56
    大小: 155.01KB
    上传者: czd886
    数字开关电源时域仿真方法研究
  • 所需E币: 2
    时间: 2020-11-18 09:30
    大小: 949.14KB
    上传者: 丸子~
    高速数字电路PCB中串扰问题的研究与仿真
  • 所需E币: 2
    时间: 2020-11-18 09:31
    大小: 391.14KB
    上传者: 丸子~
    基于Cadence_Allegr_省略_速PCB设计信号完整性分析与仿真
  • 所需E币: 2
    时间: 2020-11-18 09:29
    大小: 199.6KB
    上传者: 丸子~
    高速PCB设计中的时序分析及仿真策略
  • 所需E币: 4
    时间: 2020-11-17 22:20
    大小: 968.16KB
    上传者: xgp416
    CadenceNCVerilog仿真教程资源大小:968.16KB[摘要]这个手册将向你介绍使用NC-Verilogsimulator和SimVision。本文使用的是一个用Veilog硬件编程语言编写的一个饮料分配机,通过这个例子你将学会: ·编译Verilog源文件,描述设计,在NC-Launch(用于管理你的大型
  • 所需E币: 0
    时间: 2020-11-16 18:02
    大小: 2.13MB
    上传者: stanleylo2001
    Systemview操作环境的认识与操作-通信系统的仿真实验合集[摘要]本文档的主要内容详细介绍的是通信系统的仿真实验合集包括了:Systemview操作环境的认识与操作,滤波器使用及参数设计,模拟线性调制系统仿真,DSB调制解调仿真,SSB调制解调仿真,输出信号频谱和波形,脉冲幅度调制系统仿真,基带传输系统眼图分析与观察,数字信号的载波调制系统仿真
  • 所需E币: 4
    时间: 2020-11-16 23:09
    大小: 4.97MB
    上传者: stanleylo2001
    静电放电ESD保护器件的模拟与仿真[摘要]静电放电(ElectrostaticDischarge,ESD)是构成集成电路可靠性的主要因素之一,存在于生产到使用的每一个环节,并成为开发新一代工艺技术的难点之一,近年来,对ESD的研究也因而越来越受到重视,仿真工具在ESD领域的应用使得ESD防护的研究变得更为便利,可大幅缩短研发周期. 然而,由于ESD现象复杂的物理机制,极端的电场及温度条件,以及ESD仿真中频繁的不收敛现象,都使得FSD的仿真变得极为困难本文详细阐述了ESD的来源、造成的危害以及如何测试集成电路的防静电冲击能力,并基于Sentaurus软件,对ESD防护器件展开了的分析、研究,内容包括 1)掌握ESD保护的基本理论、测试方法和防护机理2)研究了工艺仿真流程的步骤以及网格定义在工艺仿真中的重要性,并对网格定义的方法进行了探讨3)硏究了器件仿真流程以及器件仿真中的物理模型和模型函数,并对描述同一物理机制的的各种不同模型展开对比分析.主要包括传输方程模型、能帶模型、各种迁移率退化模型、雪崩离化模型和复合模型4)研究了双极型晶体管和可控硅(SiliconControlledrectifier,SCR)防护器件的仿真,并通过对仿真结果的分析,研究了ESD保护器件在ESD应力作用下的工作机理.
  • 所需E币: 0
    时间: 2020-11-17 00:12
    大小: 499.28KB
    上传者: xgp416
    基于MATLAB的坐标变换仿真的详细资料说明
  • 所需E币: 0
    时间: 2020-11-16 15:10
    大小: 11.31MB
    上传者: wxlai1998
    WCDMA基站射频电路及微带天线设计思路(使用ADS仿真)
广告