-
Notifications
You must be signed in to change notification settings - Fork 19
Superscalar frontend #630
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Superscalar frontend #630
Conversation
bda7878
to
83aeeae
Compare
7a83fff
to
38ba7df
Compare
This reverts commit dc1fd19.
38ba7df
to
82eff00
Compare
This FENCE test fail is weird. Is this a LSU bug, which somehow wasn't detected by all the other tests? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Approved. I left few comments but they can be solved under different PR.
self.resume = Method(i=self.gen_params.get(FetchLayouts).resume) | ||
self.stall_exception = Method() | ||
self.stall_exception.add_conflict(self.resume, Priority.LEFT) | ||
It is a temporary workaround for a fetch buffer until the rest of the core becomes |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe it is a workaround, but general. It should be in transactron library in my opinion.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we have another use case, I'll be happy to move it.
|
||
# For now assume that the fetch block is 4 bytes long (a machine word). | ||
assert self.gen_params.fetch_block_bytes == 4 | ||
self.clean.add_conflict(self.write, Priority.LEFT) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Clean is last definition in module, so it is not needed to add conflicts.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
add_conflict
also prohibits the methods from running simultaneously. I am using this semantics in the fetch unit to guarantee that whenever we have a stall signal, no instruction can leave the fetch unit (even in the same cycle).
("fibonacci", "fibonacci.asm", 1200 * 2, {2: 2971215073}, basic_core_config), | ||
("fibonacci_mem", "fibonacci_mem.asm", 610 * 2, {3: 55}, basic_core_config), | ||
("fibonacci", "fibonacci.asm", 500, {2: 2971215073}, basic_core_config), | ||
("fibonacci_mem", "fibonacci_mem.asm", 400, {3: 55}, basic_core_config), | ||
("csr", "csr.asm", 200, {1: 1, 2: 4}, full_core_config), | ||
("exception", "exception.asm", 200 * 2, {1: 1, 2: 2}, basic_core_config), | ||
("exception_mem", "exception_mem.asm", 200 * 2, {1: 1, 2: 2}, basic_core_config), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there possibility to reduce rest of test duration?
Benchmarks: https://github.com/xThaid/coreblocks/actions/runs/8599901154
TODO:
riscvmodel
dependency - code ininstr.py
for encoding instructions doesn't work yet (Refactor RISC-V instruction models #631)Pipe
data structure somewhere else. (Add Pipe module #639)ArrayLayouts
(Support ArrayLayouts in assign #640)