Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
H
HDL
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Jira
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
RTSD
HDL
Commits
22fdbd2a
"lofar-cwl/git@git.astron.nl:RD/LINC.git" did not exist on "459f8d3cb7494cf8c2355d3a2297e6cc40278165"
Commit
22fdbd2a
authored
3 years ago
by
Eric Kooistra
Browse files
Options
Downloads
Patches
Plain Diff
Added more tips.
parent
9b129582
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
doc/erko_hdl_design_article.txt
+77
-0
77 additions, 0 deletions
doc/erko_hdl_design_article.txt
with
77 additions
and
0 deletions
doc/erko_hdl_design_article.txt
+
77
−
0
View file @
22fdbd2a
...
@@ -73,3 +73,80 @@ Ik zie twee niveaus:
...
@@ -73,3 +73,80 @@ Ik zie twee niveaus:
block processing foutloos (dwz what you want is what you get). Dan kunnen we er intern steeds
block processing foutloos (dwz what you want is what you get). Dan kunnen we er intern steeds
van uitgaan dat de blokken data correct zijn en hoeven we dus intern geen checks meer te doen.
van uitgaan dat de blokken data correct zijn en hoeven we dus intern geen checks meer te doen.
Design steps:
Make detailed design document with:
- requirements and assumptions
- design decisions
- context : environment, use cases
- architecture :
. dut block diagram with instances and anticipated processes,
. entity with generics, ports, MM interfaces.
- verification : sim on HW
. list of generic ranges to cover
. list of input case to cover
. tb block diagram with dut instance, other anticipated instances and processes
Implementation steps:
- prepare empty entity and tb files (dut, mmp_, tb_, tb_tb_)
- DUT:
. instantiate the reused components from the block diagram and wire them
. t_reg : gradually add the functional state signals that are needed
. -- State registers
SIGNAL r : t_reg;
SIGNAL nxt_r : t_reg;
. -- Pipeline registers
SIGNAL in_data_p : ...
. p_reg : PROCESS(dp_clk, dp_rst)
BEGIN
IF dp_rst='1' THEN
r <= c_reg_rst;
ELSIF rising_edge(dp_clk) THEN
r <= nxt_r;
END IF;
END PROCESS;
. p_comb : PROCESS(r, ...) -- single process for all combinatorial logic
-- complete sensitivity list contains all signals that are read, so that are
-- . at right of assignment statement <= , :=
-- . in the condition of an IF statement
-- State variable
VARIABLE v : t_reg;
-- Auxiliary variables
VARIABLE v_* -- optional, use to improve code readability
-- use v. only on left side? use separate v_* to clearly indicate when we use it also on the right side of assignments ?
BEGIN
v := r; -- default keep existing state
v.* := ...; -- default force specific values, e.g. set strobes to '0',
-- typically do not force data, but leave it as it is to avoid
-- unnecessary toggling and to ease viewing data value in Wave window
-- implement the processes from the block diagram to determine nxt_r
-- . this is where creativity is needed, however a good design will
-- guide the implementation
-- . use of v and r
-- next state
nxt_r <= v;
END PROCESS;
. -- Pipelining
- TB: Test the functionality of the DUT:
. start with easiest, default use case,
. then verify the additional functions and features,
. then verify the corner cases (e.g. 0, 1, some prime value, smallest, largest),
. check that the TB did indeed run (i.e. no happened must not be regarded as passed),
- TB_TB_: Multi test bench that runs multiple TB in parallel to achieve coverage
. multiple TB instances in parallel, each with other generic settings
. typically it is easier to run multiple TB in parallel, then to run the tests
that they do sequentially in one TB
- MMP_DUT: DUT with MM interfaces
- TB_MMP_DUT: Testbench with focus on MM interface access only, so typically no
need for a TB_TB_MMP.
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment