admin • 来自相关话题

1月前

AMD最新职位招聘(七月)

AMD七月最新内推职位,有需要联系微信号chipist1。LocationJob TitleShanghai1.SMTS/MTS/Sr.   Silicon Design Engineer - PD2.MTS Silicon   Desig ...查看全部

AMD七月最新内推职位,有需要联系微信号chipist1。


Location

Job Title

Shanghai

1.SMTS/MTS/Sr.   Silicon Design Engineer - PD

2.MTS Silicon   Design Engineering - Design Verification

3.MTS Silicon   Design Engineering - Design Verification

4.PMTS/SMTS/MTS   Software Engineer - Machine Deep learning

1. SMTS/MTS   Silicon Design Engineering – Physical Design

2. Sr./MTS Power   Management Engineer Urgent

3.   Senior/MTS/SMTS Design Verification Engineer Urgent

4. Senior   Silicon Design Engineer

5. Digital Logic   IP Systems Engineer Urgent

6. SMTS/ MTS GFX   FE tile owner

7. Frontend   Engineer - Graphics Urgent

8. MTS/SMTS   Design Verification Engineer (Low power) Urgent

9. GPU Core   Verification Engineer

10. Sr./MTS/SMTS   Silicon Design Engineer (Graphic Performance Verification and Analysis) Urgent

11. Sr./MTS ASIC   simulation analysis/software engineer (Graphics Performance) Urgent

12. Sr/MTS/SMTS   Silicon Engineer (Graphics Performance Analysis and Architecture Modeling)

13. Sr./MTS/   SMTS Validation Engineer – Signal Urgent

14. Sr.   Validation Engineer – Automation

15. MTS GFX   DV/infrastructure Engineer

16. SMTS Silicon   Design Engineer Urgent

17. Intern   - GPU infrastructure Urgent

18. Intern -   Graphics/AI Performance Analysis Urgent

1. SMTS SoC Diag   Lead (Diagnostics Team)

2. Sr./MTS IP Design   Engineer (FCH Team)

3. PMTS/Fellow   USB IP Arichtect (FCH Team) Urgent

4. ISP   Diagnostics Firmware Engineer (Diagnostics Team)

5. Sr. Front-End   Intergreation Engineer (CIP Team)

6. Sr./ MTS IP   DV Engineer (CIP Team)

7. Sr./ MTS   Firmware Engineer - I/O related ((Diagnostics Team)

8. Sr./ MTS   Firmware Engineer - Power Management ((Diagnostics Team)

1. Sr/MTS OpenGL   Compiler Software Engineer

2. SMTS/MTS IPSE   Engineer

3. MTS Software   Engineer - KMD & Display

4. MTS Power   Performance Lead Urgent

5. SMTS Silicon   Design Engineer(memory信号完整性 Urgent

6. MTS Silicon   Design Engineer(memory信号完整性) Urgent

7. Sr/MTS DFT   Engineer

8. SMTS DFT   Engineer

9. Sr Manager,   IPSE/RTG Platform Debug

10. Graphics   Validation Engineer

1. SMTS Lead   System Engineer Urgent

2. Manager   Hardware Development (Board Design) Urgent

3. MTS/ Sr   Hardware Development Engineer (Board design) Urgent

4. Validation   Engineer

5. MTS/Sr. Debug   Engineer (BIOS/Firmware)

6. Sr/ MTS BIOS   Engineer

7. Product   Development Engineer( Power& Performance)

8. Graphic   Validation Intern

9. Software   Intern

10. Design   Verification Intern

11. Hardware   Development Intern

1. PMTS Product   Development Engineer

2.  Layout   Design Engineer 2

3. ASIC Layout   Design Engineer 2

4. MTS ASIC   Layout Design Engineer

5. SMTS Silicon   Design Engineer

6.System   Software Design Engineer

1. Linux Kernel   Software Engineer for APU – NCG/Sr. Eng/MTS Eng/SMTS

2. NCG/MTS   Software Engineer – Virtualization

3. Camera Driver   MTS Software Engineer - Windows

4.   ADAS/Automotive MTS Software Engineer – Linux BSP/Virtualization

5. ASIC IC   Design SMTS Engineer of ISP

6. Embedded   Software Test Engineer

7. Linux Kernel   MTS Engineer of Machine Learning/GPU Computing

8. Linux DevOps   Engineer

1. Solution   Architect

Beijing

1. SoC MTS   Engineer- Verification

1.SMTS/MTS/Sr.   Silicon Design Engineer - PD

2.MTS Silicon   Design Engineering - Design Verification

3.MTS Silicon   Design Engineering - Design Verification

4.PMTS/SMTS/MTS   Software Engineer - Machine Deep learning

1. Sr. Silicon   Design-Physical Design

Hefei

1.  MTS   Customer Quality Engineer Urgent

1. MTS Debug   Engineer

Shenzhen

1. Solution   Architect

Suzhou

1. Software   Engineer (Java&C++)

2. Product Yield   Engineer

3. ATE Test

4. MTS Packaging   Engineer-Bumping

5. MTS   Manufacturing Quality Engineer

6. Director Test   Manufacturing Engineering

7. System Level   Testing Engineer

Chongqing

1. MTS Customer   Quality Engineer Urgent

Taipei

1. Business   Development Manager

Hsinchu

1. Packaging   Engineer

2. Director Supply   Chain

3. Proudction   planner & controler

4. Director   Product Development Engineer

5. Supplier   Quality Engineer

6. Software   Development Engineer - Display Solutions

7. Supply Chain   Specialist

Japan

1. Specialist   Commercial Marketing Server

Hongkong

1. Supply Chain   Specialist

zcl • 来自相关话题

1月前

广发英雄贴

风里雨里,我在这里等你,模拟ic设计工程师、ic版图设计工程师一枚,欢迎来唠叨!base在杭州,联系方式18559667360

风里雨里,我在这里等你,模拟ic设计工程师、ic版图设计工程师一枚,欢迎来唠叨!base在杭州,联系方式18559667360

芯片家 • 来自相关话题

2月前

最近做的ECO和如何使用verdiload原理图辅助做ECO

        好几年没做过ECO了,再次做起来比较痛苦,有一种清零后重新捡起来的感觉。笨办法做ECO当然是对照网表和RTL,把网表相关寄存器的逻辑都画出来,然后化简分析,找打做ECO的点,然后再手工做。但是曾经在上一家 ...查看全部

        好几年没做过ECO了,再次做起来比较痛苦,有一种清零后重新捡起来的感觉。笨办法做ECO当然是对照网表和RTL,把网表相关寄存器的逻辑都画出来,然后化简分析,找打做ECO的点,然后再手工做。但是曾经在上一家公司(业内养老单位,已经倒闭)做ECO的时候好歹是用“先进”的verdi工具辅助做。不必说用nECO里面的tcl脚本做,起码能帮忙load fan-in/out-core,加速分析吧。
        但是我在使用verdi工具上摔了跟头,不知道怎么load那种带原理图的netlist,奈何问了几个老同事也都告诉我verdi load了网表自然就有那种与非门图形库了。现在我想告诉这几个老同事“编,使劲编”,根本就是大家作为大公司的designer,不管flow,人家都给做好了,你load进来看起来都是好的,实际上verdi是需要load netlist+symbol_lib才能展示如下可爱的模样:

1.jpg

不然只load netlist,就是这个鬼样子:

2.jpg

     不买关子了,怎样建立图形库呢? verdi提供了一个工具,叫做syn2SymDB,这个工具可以把S公司的库转换成symbol库给verdi使用。

在我的main tree目录/proj/usr/my_main 执行如下命令
syn2SymDB -o tsxx_xx *.tsxx.0pxv?00c.lib.gz *.tsxx_FTx.0pxv?00c.lib.gz
setenv NOVAS_LIBS tsxx_xx
setenv NOVAS_LIBPATHS /proj/usr/my_main
然后再用verdi load 网表,找到你关心的逻辑单 元,再去tools->new schemetic->fan-out-core之类的,漂亮的带与或非门的原理图就呈现出来了。
同时顺便总结下此次ECO的教训,对比RTL前后改动,找到需要修改的点,注意:
1. 改动不要影响其它寄存器,看看你的改动点所有扇出,改动完了之后再检查一遍(load到verdi之类的工具里trace一遍)
2. 如果报了falling point点,有可能是以下原因:
a. 理解错或者用错cell了,在tech/verilog/stdcell/目录里一般有(我这次就用错了,该是与非门ND2,用成了与门 AND2)
b. 你的改动影响到了别的寄存器(我这次n42578改动是给A寄存器的,结果影响到了另外一个寄存器B)
c. 少改了某一处,所以还要反复对照前后改动的RTL(这次我发给flow owner的信里列举的RTL改动点就没列举完全)

admin • 来自相关话题

2月前

内推联盟需要你

亲爱的ICers,内推联盟现在有大量的优质IC简历,他们需要换工作,涵盖数字设计,数字验证,射频, 模拟等方向。现在急需大公司朋友们的加入,只要您们所在大公司有推荐奖励,都可以联系我们,让你赚钱,详情请咨询我们。希望感兴趣的IC工程师联系我们。微信号:chip ...查看全部

亲爱的ICers,内推联盟现在有大量的优质IC简历,他们需要换工作,涵盖数字设计,数字验证,射频, 模拟等方向。现在急需大公司朋友们的加入,只要您们所在大公司有推荐奖励,都可以联系我们,让你赚钱,详情请咨询我们。希望感兴趣的IC工程师联系我们。

微信号:chipist1   

Maggie • 来自相关话题

2月前

关于芯片验证的感悟

 18年下半年参与了某款5G芯片验证的开发过程,空余时间总结一下: 由于现在芯片的规模越来越大, 所以导致芯片验证的工作也越来越重要。 传统的通过写TB 的方式来测试芯片设计功能的方式也越来越吃力,而通过UVM的方式来进行芯片验证已经成为业 ...查看全部

 18年下半年参与了某款5G芯片验证的开发过程,空余时间总结一下:

 由于现在芯片的规模越来越大, 所以导致芯片验证的工作也越来越重要。 传统的通过写TB 的方式来测试芯片设计功能的方式也越来越吃力,而通过UVM的方式来进行芯片验证已经成为业界主流的验证方式。

 使用UVM的方式可以编写任意多个test case 配合对应的 sequence ,加上shell 脚本的辅助,可以在线切换任意的phase场景进行测试,增加了验证的自动化和灵活性,功能覆盖性也大大增强。

1. UVM 验证平台的搭建。

 一个UVM 验证仿真平台的搭建 ,需要一个整体的tb顶层来进行DUT 的封装,时钟和复位的激励生成,以及数据的DUMP 操作,应用的 virtual interface (VIF) 和 总线接口(AXI)的构建和初始化,以及和DUT的接口连接。  

 接下来编写各个应用场景对应的sequence 和test case ,通过 UVM的机制来进行指定test case 的仿真运行和测试。

 sequence 主要负责 参数的随机化生成,寄存器值的初始化,以及仿真的运行时间控制;test case 主要负责 UVM ENV component的初始化,以及在 main phase 中 通过对应的 sequence 来手动开启(关闭) 整个UVM平台的运行(采用 raise objection的方式)。这里可以采用基类构建框架, 继承类 实现具体动作的方式来增加灵活性。 我们这里还在sequence body 里面,调用了refer-C DPI 的功能,来运行C 功能。

  env component 模块主要负责各个子component(agent , moniter ,scoreborad )的集成, 这里我们使用了AXI 总线,所以这里我们也集成了AXI的一些模块(register model , adapter , VIP )。agent component 集成了sequencer 和 driver 组件 ,sequencer模块功能比较简单,负责将sequence 里面的transcation形式的数据发送给 driver ;driver组件总要负责将transcation形式的数据解析给 virtual interface ,进而传输给了DUT 。

  moniter 组件负责将DUT 的输出打包成transaction的形式,传送给scoreboard 组件。

  scoreboard组件负责 将DUT 的数据存储到queue中,同时将refer-C 输出存储到queue中,完成数据的比对。

无标题.png

1.2 寄存器读写 

  这里 主要讨论 AXI的寄存器读写 。由 sequence来完成数据的随机化操作 ,然后写到 register model 中,通过 adapter 来完成 总线和寄存器的转换,最后传送到 VIP 中,输出以 axi_vif 的形式传送给DUT的 AXI 接口。

2.png

1.3 phase的理解

   对于UVM中的component , phase的理解 才能正确使用各个组件。

   build phase 主要 完成 组件内各个子组件的创建 ;

   connect phase 主要完成 该组件与外部组件的连接;

   无时钟消耗的phase:build phase ,connect phase ,before simulation 

   在 sequence raise_objection 某一个 sequencer 后,在各个组件的main_phase 产生时钟消耗。

   关于 main_phase 的流水线设计 :

   这里 需要知道 UVM各个组件是长久活动的,在各个组件main_phase 中也需要 设计成 RTL流水线形式:

   在main_phase 采用 fork  ··· join 来保证先进行具体活动的实行 ;采用 forever  @posedge(clk) 来进行流水线设计 (等同于 RTL 设计的 always@(posedge clk ))

   在 sequence drop objection 来关闭 。

1.4 refer-c 和DPI 接口设计  

   SV 方面:

   如果SV 和 C++ 交互为对象 :import “DPI-C" function chandle getWrapperInstance() ; 来获取对象 ;

   如果SV 和C++ 交互为函数:import "DPI-C" function void systemSetup (input chandle systemInst ,...) 来传送数据给refer-C

   C/C++ 方面:

   添加与SV交互的接口代码 :dpi_main.cpp

   修改C/C++ 代码,GDB 调试 ,最后集成到 UVM 中 

   Makefile :

   添加输入参数给 SV ,环境配置  

   shell:

   test case 的自动化配置,参数传递给 Makefile

菜菜 • 来自相关话题

2月前

成都、厦门--模拟ic设计工程师,模拟版图工程师

微信:861112547成都厦门--模拟ic设计工程师,模拟版图工程师,欢迎推荐

微信:861112547



成都厦门--模拟ic设计工程师,模拟版图工程师,欢迎推荐

左拉呀 #招聘 • 来自相关话题

2月前

北京智能可穿戴创新公司-Digital Verification Engineer  

岗位Digital Verification Engineer Design and Integration Engineer 要求:5年以上,有RISC-V经验者优先欢迎详细了解微信:1370621224 ...查看全部

岗位

Digital Verification Engineer

 

Design and Integration Engineer

 

要求:5年以上,有RISC-V经验者优先

欢迎详细了解

微信:1370621224

Maggie • 来自相关话题

2月前

Testbench/UsingFactoryOverrides

       UVM factory允许在构造时将类替换为派生类型的另一个类。这对于通过将一个类替换为另一个类而无需编辑或重新编译测试平台代码来更改测试平台的行为来说是非常有用的。为了使factory重载过程起作用,需要 ...查看全部

       UVM factory允许在构造时将类替换为派生类型的另一个类。这对于通过将一个类替换为另一个类而无需编辑或重新编译测试平台代码来更改测试平台的行为来说是非常有用的。为了使factory重载过程起作用,需要遵循许多编码约定先决条件,这些在UVM factory的文章中进行了解释。
       UVM factory可以被认为是查找表。当使用 :: type_id :: create(“”,)方法(approach)进行“普通”组件构造时,会发生的是type_id用于为类选择factory组件包装器, 构造其内容并再次传回结果句柄。factory重载更改了查找的发生方式,因此查找原始的type_id会导致使用不同的type_id。因此,返回不同类型的构造对象的句柄。此技术依赖于多态性,即能够使用基本类型句柄引用派生类型的能力。实际上,只有当父类被类扩展层次结构中的一个子类重载时,重载才会起作用。

       Component Overrides 

     UVM中有两种类型的组件重载 - type overrides 和 instance overrides。  

       Component Type Overrides  

       type override意味着每次在测试平台层次结构中创建组件类type时,都会在其位置创建替换type。这适用于该组件类型的所有实例。以下代码片段中说明了此类重载的方法调用:

       // 
       // Component type override example 
       // ---------------------------------------------

       // Colour parent class 
       class colour extends uvm_component;

       `uvm_component_utils(colour)

       //etc
       endclass: colour

       // Red child class 
       class red extends colour;

       `uvm_component_utils(red)

       //etc 
       endclass: red

       // 
       // Factory type override syntax is: 
       // 
       // ::type_id::set_type_override(::get_type(), replace);
       //
       // Where replace is a bit which when ==1 enables the override of an existing override, otherwise
       // the existing override is honoured.

       // To override all instances of colour with red:
       colour::type_id::set_type_override(red::get_type(), 1);

       // This means that the following creation line returns a red, rather than a colour
       pixel = colour::type_id::create("pixel", this);

       参数化组件类也可以被重载,但必须注意确保重载类具有与被重载的类相同的参数值,否则它们不被认为是相关types:

        // 
        // Type overrides for parameterised classes: 
        // ----------------------------------------------------------

        // Base class type 
        class bus_driver #(int BUS_WIDTH = 32) extends uvm_component;

        `uvm_component_param_utils(bus_driver #(BUS_WIDTH))
        // etc

        endclass: bus_driver

        // Derived class type 
        class bus_conductor #(int BUS_WIDTH = 32) extends bus_driver #(BUS_WIDTH);

        `uvm_component_param_utils(bus_conductor #(BUS_WIDTH)) 
        // etc

        endclass: bus_conductor

        // The parameterised type override needs to keep the parameterisation consistent【重点记录下】

        bus_driver #(64)::type_id::set_type_override(bus_conductor #(64)::get_type(), 1); // This will succeed

        // Creation of a #(64) bus_driver results in a #(64) bus_conductor handle being returned:

        bus_person = bus_driver#(64)::type_id::create("bus_person", this);

        // Whereas creating a #(16) bus_driver results in a #(16) bus_driver handle being returned because
        // the matching type override is not found:

        bus_person = bus_driver#(16)::type_id::create("bus_person", this);

        // Similarly if a type override has non-matching parameters, then it will fail and return the original type

        bus_driver #(64)::type_id::set_type_override(bus_conductor #(32)::get_type(), 1); // Returns bus_driver #(64)
       

        Component Instance Overrides

        可以通过在uvm组件层次结构中指定其位置来重载特定组件实例。同样,这种方法可以与参数化类一起使用,只要注意匹配重载中涉及的两个类类型的参数:

        // 
        // Component Instance Factory Override example 
        // --------------------------------------------

        // Using red --> colour example from type override example 
        // 
        // Syntax for the instance override:
        //
        // ::type_id::set_inst_override(::get_type(), );
        //

        colour::type_id::set_inst_override(red::get_type(), "top.env.raster.spot");

        // And again for a parameterised type, the parameter values must match

        bus_driver #(64)::type_id::set_inst_override(bus_conductor #(64)::get_type(), "top.env.bus_agent.m_driver");

        Object Overrides

      Objects or sequence 相关 objects通常仅与type重载一起使用,因为instance重载方法涉及UVM测试平台组件层次结构中哪些objects不参与的位置。然而,有一个编码技巧可用于重载object的特定“instances”,这在overriding sequences的文章中有解释。

       object 重载的代码遵循与组件重载相同的形式。

Maggie • 来自相关话题

2月前

Testbench/SystemVerilog Packages

包是SystemVerilog语言结构,它使相关的声明和定义能够在包名称空间中组合在一起。包可能包含类型定义,常量声明,函数和类模板。为了能在一个范围内使用包,必须先导入它,然后才能引用其内容。     &nb ...查看全部

包是SystemVerilog语言结构,它使相关的声明和定义能够在包名称空间中组合在一起。包可能包含类型定义,常量声明,函数和类模板。为了能在一个范围内使用包,必须先导入它,然后才能引用其内容。
       包是组织代码的一种有用方法,也是确保对类型、类等的引用是一致的有用方法。UVM基类库包含在一个名为“uvm_pkg”的包中。在开发UVM测试平台时,应该使用包来收集和组织各种类定义,这些类定义是为实现agent、envs、sequence libraries、 test libraries等而开发的。 

       UVM Package Coding Guidelines 

      Package naming and file naming conventions: 

       应使用_pkg 后缀命名包。包含该包的文件的名称应反映包的名称,并具有.sv扩展名。【如YnrrubysimTestTop.sv文件中包含一个包,名字是package  YnrrubysimTestTop】
      例如:文件spi_env_pkg.sv将包含spi_env_pkg包。
      Justification:.sv扩展名是一种约定,表示包文件是独立的编译单元。_pkg 后缀表示该文件包含一个包。这两个约定对人类和机器解析脚本都很有用。

      Classes contained within a package should be `included 

      在包范围内声明的类模板应该分成具有.svh扩展名的单个文件。这些文件应该按照需要编译的顺序包含在包中【使用`include】。包文件是唯一应该使用`includes的地方,被'include的文件中不应该包含其他`include语句。
      Justification:.将类声明在单独的文件中使它们更易于维护,并且还使包内容更清晰。

      Imports from other packages should be declared at the head of the package

      包的内容可能需要引用另一个包的内容。在这种情况下,外部包应该在包代码体的开头声明。单个文件(例如可能被`include的类模板)不应单独导入。
      Justification:.将所有imports分组到一个地方可以清楚地了解包依赖那些文件或外部包。将imports放置在包的其他部分或内部被include的文件中,这可能会导致排序和潜在的类型冲突。

      All the files used by a package should be collected together in one directory

      要包含在包中的所有文件应该一起收集在一个目录文件夹中。这对于agents来说,它的目录结构需要是完整的独立包,这点尤为重要。
      Justification:.这使编译更容易,因为只有一个include目录,它还有助于重用,因为包的所有文件可以很容易地收集在一起。
      下面是UVM env的包文件示例。这个env包含两个agent(spi和apb)和一个寄存器模型,这些作为子包导入。与env相关的类模板被`include。

       // Note that this code is contained in a file called spi_env_pkg.sv 
       // 
       // In Questa it would be compiled using:
       // vlog +incdir+$UVM_HOME/src+  /spi_env_pkg.sv
       //

       //
       // Package Description:
       //
       package spi_env_pkg;

       // Standard UVM import & include:
       import uvm_pkg::*; 
       `include "uvm_macros.svh"

       // Any further package imports:
       import apb_agent_pkg::*; 
       import spi_agent_pkg::*; 
       import spi_register_pkg::*;

       // Includes:
       `include "spi_env_config.svh"
       `include "spi_virtual_sequencer.svh"
       `include "spi_env.svh"

       endpackage: spi_env_pkg

       Package Scopes

      经常让用户感到困惑的是SystemVerilog package是一个范围。这意味着在package中声明的所有内容以及导入到package中的其他package的内容仅在本package的范围内可见。如果将包导入另一个范围(即另一个包或模块),则只能看到包的内容,而不是它导入的任何包的内容。如果新范围中需要这些其他包的内容,则需要单独导入它们。

       // 
       // Package Scope Example
       // ---------------------------------------------------- 
       //
       package spi_test_pkg;

       // The UVM package has to be imported, even though it is imported
       // in the spi_env package. This is because the import of the uvm_pkg 
       // is only visible within the current scope
       import uvm_pkg::*;
       // The same is true of the `include of the uvm_macros
       `include "uvm_macros.svh"

       // Import of uvm_pkg inside the spi_env package is not 
       // visible within the scope of the spi_test package
       import spi_env_pkg::*; 

       // Other imports 
       // Other `includes
       `include spi_test_base.svh

       endpackage: spi_test_pkg

Maggie • 来自相关话题

2月前

SystemVerilog的文件读取方法

最近需要需要用sv读取文件,然后设定环境参数的问题。用$fscanf和$feof结合的方式解决了。具体做法如下:integer fd;string name;reg value;reg setting_value;fd=$fopen("ABC.txt","r" ...查看全部

最近需要需要用sv读取文件,然后设定环境参数的问题。

用$fscanf和$feof结合的方式解决了。

具体做法如下:

integer fd;

string name;

reg value;

reg setting_value;

fd=$fopen("ABC.txt","r");

while(!$feof(fd))begin

     $fscanf(fd, "%s %d", name, value);

     $display( "%s %d", name, value);

     if(name == "my_name") begin

        setting_value = value;

        break;

     end

end

ABC.txt的文件内容每行都是字符串+数字组成:

string_A 1

srting_B 0

...

总结:无论是C++还是perl等脚本,读取文件内容方式都是差不多的,大同小异。