Git Product home page Git Product logo

ncg_interview's Introduction

Dyumnin Semiconductors, Take home ASIC/FPGA Design and verification coding test for new college graduates.

Take home coding test.

  • This test mimic's the workflow for an NCG at Dyumnin Semiconductors.
  • There is a high probability that your first assignment at work will be on similar lines to the 5 steps listed below.
  • The steps below should normally take 1 man day's effort.
  • There are some aspects of tools and techniques which may not be a part of your regular engineering course work, tutorials for most are available online. While some may require research on your part.

Assumption

  1. The candidate know's verilog, Algorithms, Verification(UVM,VUnit,CocoTB etc.), Digital logic and has worked with FPGA's

Instructions:

Step 1:

  1. Clone this repository.
  2. Create a branch with "candidate/{your name} as the branch name.
  3. Create a Xilinx project called ddr4 for part xcku115-flvd1517-1-c
  4. and use the Xilinx ddr4 MIG generator to generate a DDR4 controller and physical layer IP with AXI4 Interface and 64 bit datawidth
  5. Checkin all the generated files and tag it as Step1

Step 2:

Write a verilog module which

  1. At reset sets the address to 0.
  2. Has a simple interface (enable(input),ready(output) data(input)) On one end which takes in 8 bit numbers, concats them to generate a 64 bit number and writes this result to the ddr4 axi interface generated in step 1. and increments the address.

Write another module which has an interface of (enable, ready, address(in), data(out)) and interfaces to the same DDR logic in Step 1. and returns the data in DDR for the specified address.

Checkin the files and tag it as Step2

Step 3:

Checkin the testplan for the dut containing logic in step1 and step2 and tag it as Step3

Ref: https://verificationacademy.com/cookbook/coverage

Step 4:

Implement the verification env and write and verify atleast 2 test(should contain a ddr write and read). If you know python, then you can do the verification using cocotb (We use cocotb internally for all our verification).

Ref: https://cocotb.readthedocs.io/

Step 5.

Create a pull request on the original repo with your code submission.

Once the pull request is created we will schedule the next round of interview.

In case of any issues, raise an issue in the github issue tracking system for this repo..

ncg_interview's People

Contributors

jahagirdar avatar

Stargazers

Vedant Paranjape avatar Francis Joseph avatar

Watchers

James Cloos avatar  avatar

ncg_interview's Issues

Step2: unstated use of clock

In step2, address need to be incremented. If there is no synchronous element like clock then address = address + 1 will generate a combinational loop. Also, the gearbox circuit used as user interface in this step must be sequential circuit to change the state to get total 64 bit data at the output. This means step 2 should have clock input which is not mentioned on the specification page.

Step2: Generating 72 bit number from 8 bit input (data)

How 8 bit input can be concatenated to 72 bit at interface? Will nine 8 bit inputs need to be stored in temporary registers and then they will be concatenated to make 72 bit number or they are 9 channels each having 8 bits instead of one input of 8 bits and will be concatenated together to make 72 bit number?

Step2: port direction of enable and ready in module 2

Port direction of enable and ready in module 2 is not clear. If I assume module 1 and 2 as two different interfaces to same DDR PHY IP then will enable and ready in module 2 have same port direction as module 1 (enable(input),ready(output))?

Step2: Clocks

Are both interfaces are insensitive to clock input? If yes, then with respect to what reset will be synchronised? means will I have to make this as clock less design for both interfaces?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.