unihd-cag / odfi-rfg Goto Github PK
View Code? Open in Web Editor NEWTCL based extensible Register File Generator
Home Page: http://unihd-cag.github.io/odfi-rfg/
License: GNU General Public License v3.0
TCL based extensible Register File Generator
Home Page: http://unihd-cag.github.io/odfi-rfg/
License: GNU General Public License v3.0
Update the addressing scheme to allow aligning parts of the registerfile to a defined address.
Also add a register field if it is write only and has a trigger ID
A rreinit_source register triggered from the hardware interface
If a register has no software and hardware rights do not generate anything
I found some issues in the VerilogInterface module for Verilog generator.
Maybe they are linked to non-committed code because the sources are not correct.
I committed a few preview fixes on the associated branch
The address map in the generated files is confusing. Since the 3 least significant bits are discarded through 8-byte granularity the actual address that must be applied is the currently calculated address shifted right by 3bit.
Hope the request is clear :)
Example config file:
package require rfg
package require generator
read_rf info.rf
generator verilog {
destination_file = ""
}
generator e {
dest...
}
Write a parameter.tm which allows adding parameters to external registerfiles, to define which one the registerfile wants and which ones are required or optional.
Variables in loop statements are converted wrong (missing $) in the rfs_to_rfg conversion tool.
Generate e language files for the register file testbench.
Generate 2 files:
create TWIDTH define in rfgheader generator
orginise the helper functions in classes.
Generate internal Registerfiles with the verilog-generator
Description:
registerFile test_rf {
internal test_extern_rf.rf externRF
}
should be generated as internal instance
Example: address width to a specific RF is 4 bits. In the RF the signal is defined as address[6:3] instead of [3:0].
In the address calculation the block ids do not influence the object size which leads to wrong calculated addresses in depth hierarchical rf designs
Hierarchical name bug in the rfgheader generator.
Repeat should generate the repetitive part of the register files as an array or like an array.
This is for easier usage in generated testbench/ library code
Create a generator which generates C/C++ Defines for software to support accessing the registerfile from C/C++ Code:
The defines should be like:
#define register_name0 0x000
#define register_name1 0x008
...
But maybe there is a better solution than C/C++ #defines
A tcl script which searches the unit test folder for *.unit-test.tcl files, and runs them.
For this each unit-test tcl file should be renamed to name.unit-test.tcl as an identifier.
Line 320 in registerfile_template.tcl
1 bit wide read_data, write_data and address signals in Register Files are causing errors
The behavior of the invalid_address signal should be modified.
More to a invalid_access behavior
Create a html documentation with a better overview and navigation within the registerfile documentation
Generate the write data and read data width with the widht needed and not with the same width
TCL 8.6 comes with ITCL 4 per default, and all the package require Itcl 3.4 commands break compatibility.
Cleaning up the requires and enabling ITCL 3.4 and 4.0 will improve general compatibility, and make the tool usable on windows for example
Refactor the register file verilog generator in three steps:
Single Register RF is causing a verilog error in the hierarchie
If you are generating a registerfile with just one RAM and software rw access and no hardware rights, the output verilog will have a syntax error because of a comma error in the blackbox definition.
.rf description causing the error:
registerFile ramRF {
ramBlock TestRAM {
width 16
depth 32
software rw
}
}
More than one Reserved Field in one Register results in a naming issue
Hardware dependent features should be implemented via the registerfile description.
(Especially async and sync reset)...
At the moment there are some cases, where the verilog generator generates empty always blocks, these cases have to be eliminated.
ones and zeros statements for a complete reset to a vector of the field length with ones or zeroes.
external RamBlocks which schould act as fifo results in an error
relative addresses should be calculated within the addressing step and added as an attribute...
A little script which reads in verilog defines as tcl variables.
This can be handy for the generation of registerfiles with parameter.
Depending of the definition on when the invalid address signal should appear there may is a bug in the hardware generation for write only registerfile objects. (To be confirmed...)
Add generation of external ramBlocks in the verilog-generator.
Description:
ramBlock RAM {
external
width 16
depth 256
software rw
hardware rw
}
Will generate input and outputs for an external ramBlock.
A Generator to produce files for the system verilog software interafce of the RFG.
A document in which is defined which RFG description results in which hardware
generator for e, which builds a top.e file for the hw interface of the register file. In this file an UVC is instantiated for each field/ramblock of the register file.
For an external Trigger block trigger signals should be generated when they are not existing:
register r1 {
field f1 {
width 1
hardware {
rw
trigger "TriggerID"
}
}
}
Also the triggers should have IDs trigger with the same ID should be ored in an hierarchical way
Add an attribute for counters to let them count on a rising edge...
rfs backport tries to read out the absolute address of a group which does not exist and then crashes.
verilog generation for ramBlocks with fields.
How it should be generated has to be defined.
Add parameter to RF counter to increment by more than one
wire and regs for the signals in the VerilogGenerator may are not generated correctly for external RAMs in use with internal RegisterFiles
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.