Skip to content
This repository was archived by the owner on Feb 5, 2023. It is now read-only.

Latest commit

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

+-----------------------+
| HOW TO RUN SIMULATION |
+-----------------------+
There are two ways to run simulation: using chiseltest, the built-in testing
method for Chisel; or using Verilator (or some other verilog simulation tool)
to run simulation manually.
You will need sbt, the Scala build tool, to compile the code. Before
simulating, please edit config.scala to make sure flags are set properly. You
will need to place the machine code to run in hexadecimal format on a file
named "data.data" in the current working directory. Input is read from
"infile.data" under cwd, also in hexadecimal format. These files are
configurable from config.scala, under p.testModule.
To run simulation using chiseltest:
1. You need to have Verilator installed.
2. Set mode to "test" in config.scala.
3. Run the test using the command "sbt run".
To run simulation manually:
1. Set mode to "codegen" in config.scala and make sure codegen.module is
"new TestModule" (not "new Cpu").
2. Generate Verilog code using the command "sbt run".
3. Copy src/main/resources/testbench.v to the current directory.
4. Run the simulation tool using testbench.v as the top module. For example,
using Verilator, you can use the following commands to run simulation:
verilator testbench.v --binary --timing -j $(nproc) --threads $(nproc) -Wno-UNOPTTHREADS -O3
./obj_dir/Vtestbench
If you want to play with the code, it is recommended that you spin up a sbt
daemon by running "sbt" and type in "run" each time you modify the code,
instead of running "sbt run" each time, to take full advantage of incremental
compilation provided by sbt.
+----------------------+
| HOW TO RUN SYNTHESIS |
+----------------------+
1. Make sure Vivado is installed.
2. Create a new project in Vivado.
3. Set mode to "codegen" in config.scala and make sure codegen.module is
"new Cpu" (not "new TestModule").
4. Generate Verilog code using the command "sbt run".
5. Copy the Verilog files in src/main/resources EXCEPT testbench.v, and copy
Cpu.v generated in step 4, to the Vivado project you have just created.
6. Run synthesis in Vivado.
+---------------+
| TESTING NOTES |
+---------------+
Icarus Verilog is unable to simulate some patterns in the CPU design, so please
use Verilator.
+-----------+
| HCI NOTES |
+-----------+
Some modifications are made to the HCI to better accomodate debugging.
The 7-segment display is used to show the current program counter. You need to
press the left button (BTNL) to update the display (or else it flashes too
quickly that you won't be able to see anything.) There are two sources of PC
data, and switch SW1 is used to control which is shown. Turn off SW1 to show
the last PC committed by the reorder buffer; turn on to show the current PC
being fetched by the instruction fetch unit. In RV32, the address is 32-bit,
but the display could only show a 16-bit hexadecimal number. SW0 is used to
toggle which 16 bits are shown. Switch on to see the high 16 bits (which are
usually just zeroes), and switch off to see low 16 bits. The switches will not
trigger display updates; you need to press the left button after switching.
Note that the last committed PC is initialized to be 0xDEADBEEF.
The LEDs are used to show the status of some design units:
LD0 on --> debug break
LD1 on --> io buffer full
LD2 on --> store buffer full
LD3 on --> load buffer full
LD4 on --> reservation station (for ALU) full
LD5 on --> reorder buffer full
LD6 on --> load/store queue full
The central button (BTNC) is used as the reset button as usual.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - panic-coursework/fakecpu · GitHub
Skip to content
This repository was archived by the owner on Feb 5, 2023. It is now read-only.

Latest commit

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

+-----------------------+
| HOW TO RUN SIMULATION |
+-----------------------+
There are two ways to run simulation: using chiseltest, the built-in testing
method for Chisel; or using Verilator (or some other verilog simulation tool)
to run simulation manually.
You will need sbt, the Scala build tool, to compile the code. Before
simulating, please edit config.scala to make sure flags are set properly. You
will need to place the machine code to run in hexadecimal format on a file
named "data.data" in the current working directory. Input is read from
"infile.data" under cwd, also in hexadecimal format. These files are
configurable from config.scala, under p.testModule.
To run simulation using chiseltest:
1. You need to have Verilator installed.
2. Set mode to "test" in config.scala.
3. Run the test using the command "sbt run".
To run simulation manually:
1. Set mode to "codegen" in config.scala and make sure codegen.module is
"new TestModule" (not "new Cpu").
2. Generate Verilog code using the command "sbt run".
3. Copy src/main/resources/testbench.v to the current directory.
4. Run the simulation tool using testbench.v as the top module. For example,
using Verilator, you can use the following commands to run simulation:
verilator testbench.v --binary --timing -j $(nproc) --threads $(nproc) -Wno-UNOPTTHREADS -O3
./obj_dir/Vtestbench
If you want to play with the code, it is recommended that you spin up a sbt
daemon by running "sbt" and type in "run" each time you modify the code,
instead of running "sbt run" each time, to take full advantage of incremental
compilation provided by sbt.
+----------------------+
| HOW TO RUN SYNTHESIS |
+----------------------+
1. Make sure Vivado is installed.
2. Create a new project in Vivado.
3. Set mode to "codegen" in config.scala and make sure codegen.module is
"new Cpu" (not "new TestModule").
4. Generate Verilog code using the command "sbt run".
5. Copy the Verilog files in src/main/resources EXCEPT testbench.v, and copy
Cpu.v generated in step 4, to the Vivado project you have just created.
6. Run synthesis in Vivado.
+---------------+
| TESTING NOTES |
+---------------+
Icarus Verilog is unable to simulate some patterns in the CPU design, so please
use Verilator.
+-----------+
| HCI NOTES |
+-----------+
Some modifications are made to the HCI to better accomodate debugging.
The 7-segment display is used to show the current program counter. You need to
press the left button (BTNL) to update the display (or else it flashes too
quickly that you won't be able to see anything.) There are two sources of PC
data, and switch SW1 is used to control which is shown. Turn off SW1 to show
the last PC committed by the reorder buffer; turn on to show the current PC
being fetched by the instruction fetch unit. In RV32, the address is 32-bit,
but the display could only show a 16-bit hexadecimal number. SW0 is used to
toggle which 16 bits are shown. Switch on to see the high 16 bits (which are
usually just zeroes), and switch off to see low 16 bits. The switches will not
trigger display updates; you need to press the left button after switching.
Note that the last committed PC is initialized to be 0xDEADBEEF.
The LEDs are used to show the status of some design units:
LD0 on --> debug break
LD1 on --> io buffer full
LD2 on --> store buffer full
LD3 on --> load buffer full
LD4 on --> reservation station (for ALU) full
LD5 on --> reorder buffer full
LD6 on --> load/store queue full
The central button (BTNC) is used as the reset button as usual.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - panic-coursework/fakecpu · GitHub
Skip to content
This repository was archived by the owner on Feb 5, 2023. It is now read-only.

Latest commit

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

+-----------------------+
| HOW TO RUN SIMULATION |
+-----------------------+
There are two ways to run simulation: using chiseltest, the built-in testing
method for Chisel; or using Verilator (or some other verilog simulation tool)
to run simulation manually.
You will need sbt, the Scala build tool, to compile the code. Before
simulating, please edit config.scala to make sure flags are set properly. You
will need to place the machine code to run in hexadecimal format on a file
named "data.data" in the current working directory. Input is read from
"infile.data" under cwd, also in hexadecimal format. These files are
configurable from config.scala, under p.testModule.
To run simulation using chiseltest:
1. You need to have Verilator installed.
2. Set mode to "test" in config.scala.
3. Run the test using the command "sbt run".
To run simulation manually:
1. Set mode to "codegen" in config.scala and make sure codegen.module is
"new TestModule" (not "new Cpu").
2. Generate Verilog code using the command "sbt run".
3. Copy src/main/resources/testbench.v to the current directory.
4. Run the simulation tool using testbench.v as the top module. For example,
using Verilator, you can use the following commands to run simulation:
verilator testbench.v --binary --timing -j $(nproc) --threads $(nproc) -Wno-UNOPTTHREADS -O3
./obj_dir/Vtestbench
If you want to play with the code, it is recommended that you spin up a sbt
daemon by running "sbt" and type in "run" each time you modify the code,
instead of running "sbt run" each time, to take full advantage of incremental
compilation provided by sbt.
+----------------------+
| HOW TO RUN SYNTHESIS |
+----------------------+
1. Make sure Vivado is installed.
2. Create a new project in Vivado.
3. Set mode to "codegen" in config.scala and make sure codegen.module is
"new Cpu" (not "new TestModule").
4. Generate Verilog code using the command "sbt run".
5. Copy the Verilog files in src/main/resources EXCEPT testbench.v, and copy
Cpu.v generated in step 4, to the Vivado project you have just created.
6. Run synthesis in Vivado.
+---------------+
| TESTING NOTES |
+---------------+
Icarus Verilog is unable to simulate some patterns in the CPU design, so please
use Verilator.
+-----------+
| HCI NOTES |
+-----------+
Some modifications are made to the HCI to better accomodate debugging.
The 7-segment display is used to show the current program counter. You need to
press the left button (BTNL) to update the display (or else it flashes too
quickly that you won't be able to see anything.) There are two sources of PC
data, and switch SW1 is used to control which is shown. Turn off SW1 to show
the last PC committed by the reorder buffer; turn on to show the current PC
being fetched by the instruction fetch unit. In RV32, the address is 32-bit,
but the display could only show a 16-bit hexadecimal number. SW0 is used to
toggle which 16 bits are shown. Switch on to see the high 16 bits (which are
usually just zeroes), and switch off to see low 16 bits. The switches will not
trigger display updates; you need to press the left button after switching.
Note that the last committed PC is initialized to be 0xDEADBEEF.
The LEDs are used to show the status of some design units:
LD0 on --> debug break
LD1 on --> io buffer full
LD2 on --> store buffer full
LD3 on --> load buffer full
LD4 on --> reservation station (for ALU) full
LD5 on --> reorder buffer full
LD6 on --> load/store queue full
The central button (BTNC) is used as the reset button as usual.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - panic-coursework/fakecpu · GitHub
Skip to content
This repository was archived by the owner on Feb 5, 2023. It is now read-only.

Latest commit

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

+-----------------------+
| HOW TO RUN SIMULATION |
+-----------------------+
There are two ways to run simulation: using chiseltest, the built-in testing
method for Chisel; or using Verilator (or some other verilog simulation tool)
to run simulation manually.
You will need sbt, the Scala build tool, to compile the code. Before
simulating, please edit config.scala to make sure flags are set properly. You
will need to place the machine code to run in hexadecimal format on a file
named "data.data" in the current working directory. Input is read from
"infile.data" under cwd, also in hexadecimal format. These files are
configurable from config.scala, under p.testModule.
To run simulation using chiseltest:
1. You need to have Verilator installed.
2. Set mode to "test" in config.scala.
3. Run the test using the command "sbt run".
To run simulation manually:
1. Set mode to "codegen" in config.scala and make sure codegen.module is
"new TestModule" (not "new Cpu").
2. Generate Verilog code using the command "sbt run".
3. Copy src/main/resources/testbench.v to the current directory.
4. Run the simulation tool using testbench.v as the top module. For example,
using Verilator, you can use the following commands to run simulation:
verilator testbench.v --binary --timing -j $(nproc) --threads $(nproc) -Wno-UNOPTTHREADS -O3
./obj_dir/Vtestbench
If you want to play with the code, it is recommended that you spin up a sbt
daemon by running "sbt" and type in "run" each time you modify the code,
instead of running "sbt run" each time, to take full advantage of incremental
compilation provided by sbt.
+----------------------+
| HOW TO RUN SYNTHESIS |
+----------------------+
1. Make sure Vivado is installed.
2. Create a new project in Vivado.
3. Set mode to "codegen" in config.scala and make sure codegen.module is
"new Cpu" (not "new TestModule").
4. Generate Verilog code using the command "sbt run".
5. Copy the Verilog files in src/main/resources EXCEPT testbench.v, and copy
Cpu.v generated in step 4, to the Vivado project you have just created.
6. Run synthesis in Vivado.
+---------------+
| TESTING NOTES |
+---------------+
Icarus Verilog is unable to simulate some patterns in the CPU design, so please
use Verilator.
+-----------+
| HCI NOTES |
+-----------+
Some modifications are made to the HCI to better accomodate debugging.
The 7-segment display is used to show the current program counter. You need to
press the left button (BTNL) to update the display (or else it flashes too
quickly that you won't be able to see anything.) There are two sources of PC
data, and switch SW1 is used to control which is shown. Turn off SW1 to show
the last PC committed by the reorder buffer; turn on to show the current PC
being fetched by the instruction fetch unit. In RV32, the address is 32-bit,
but the display could only show a 16-bit hexadecimal number. SW0 is used to
toggle which 16 bits are shown. Switch on to see the high 16 bits (which are
usually just zeroes), and switch off to see low 16 bits. The switches will not
trigger display updates; you need to press the left button after switching.
Note that the last committed PC is initialized to be 0xDEADBEEF.
The LEDs are used to show the status of some design units:
LD0 on --> debug break
LD1 on --> io buffer full
LD2 on --> store buffer full
LD3 on --> load buffer full
LD4 on --> reservation station (for ALU) full
LD5 on --> reorder buffer full
LD6 on --> load/store queue full
The central button (BTNC) is used as the reset button as usual.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - panic-coursework/fakecpu · GitHub
Skip to content
This repository was archived by the owner on Feb 5, 2023. It is now read-only.

Latest commit

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

+-----------------------+
| HOW TO RUN SIMULATION |
+-----------------------+
There are two ways to run simulation: using chiseltest, the built-in testing
method for Chisel; or using Verilator (or some other verilog simulation tool)
to run simulation manually.
You will need sbt, the Scala build tool, to compile the code. Before
simulating, please edit config.scala to make sure flags are set properly. You
will need to place the machine code to run in hexadecimal format on a file
named "data.data" in the current working directory. Input is read from
"infile.data" under cwd, also in hexadecimal format. These files are
configurable from config.scala, under p.testModule.
To run simulation using chiseltest:
1. You need to have Verilator installed.
2. Set mode to "test" in config.scala.
3. Run the test using the command "sbt run".
To run simulation manually:
1. Set mode to "codegen" in config.scala and make sure codegen.module is
"new TestModule" (not "new Cpu").
2. Generate Verilog code using the command "sbt run".
3. Copy src/main/resources/testbench.v to the current directory.
4. Run the simulation tool using testbench.v as the top module. For example,
using Verilator, you can use the following commands to run simulation:
verilator testbench.v --binary --timing -j $(nproc) --threads $(nproc) -Wno-UNOPTTHREADS -O3
./obj_dir/Vtestbench
If you want to play with the code, it is recommended that you spin up a sbt
daemon by running "sbt" and type in "run" each time you modify the code,
instead of running "sbt run" each time, to take full advantage of incremental
compilation provided by sbt.
+----------------------+
| HOW TO RUN SYNTHESIS |
+----------------------+
1. Make sure Vivado is installed.
2. Create a new project in Vivado.
3. Set mode to "codegen" in config.scala and make sure codegen.module is
"new Cpu" (not "new TestModule").
4. Generate Verilog code using the command "sbt run".
5. Copy the Verilog files in src/main/resources EXCEPT testbench.v, and copy
Cpu.v generated in step 4, to the Vivado project you have just created.
6. Run synthesis in Vivado.
+---------------+
| TESTING NOTES |
+---------------+
Icarus Verilog is unable to simulate some patterns in the CPU design, so please
use Verilator.
+-----------+
| HCI NOTES |
+-----------+
Some modifications are made to the HCI to better accomodate debugging.
The 7-segment display is used to show the current program counter. You need to
press the left button (BTNL) to update the display (or else it flashes too
quickly that you won't be able to see anything.) There are two sources of PC
data, and switch SW1 is used to control which is shown. Turn off SW1 to show
the last PC committed by the reorder buffer; turn on to show the current PC
being fetched by the instruction fetch unit. In RV32, the address is 32-bit,
but the display could only show a 16-bit hexadecimal number. SW0 is used to
toggle which 16 bits are shown. Switch on to see the high 16 bits (which are
usually just zeroes), and switch off to see low 16 bits. The switches will not
trigger display updates; you need to press the left button after switching.
Note that the last committed PC is initialized to be 0xDEADBEEF.
The LEDs are used to show the status of some design units:
LD0 on --> debug break
LD1 on --> io buffer full
LD2 on --> store buffer full
LD3 on --> load buffer full
LD4 on --> reservation station (for ALU) full
LD5 on --> reorder buffer full
LD6 on --> load/store queue full
The central button (BTNC) is used as the reset button as usual.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - panic-coursework/fakecpu · GitHub
Skip to content
This repository was archived by the owner on Feb 5, 2023. It is now read-only.

Latest commit

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

+-----------------------+
| HOW TO RUN SIMULATION |
+-----------------------+
There are two ways to run simulation: using chiseltest, the built-in testing
method for Chisel; or using Verilator (or some other verilog simulation tool)
to run simulation manually.
You will need sbt, the Scala build tool, to compile the code. Before
simulating, please edit config.scala to make sure flags are set properly. You
will need to place the machine code to run in hexadecimal format on a file
named "data.data" in the current working directory. Input is read from
"infile.data" under cwd, also in hexadecimal format. These files are
configurable from config.scala, under p.testModule.
To run simulation using chiseltest:
1. You need to have Verilator installed.
2. Set mode to "test" in config.scala.
3. Run the test using the command "sbt run".
To run simulation manually:
1. Set mode to "codegen" in config.scala and make sure codegen.module is
"new TestModule" (not "new Cpu").
2. Generate Verilog code using the command "sbt run".
3. Copy src/main/resources/testbench.v to the current directory.
4. Run the simulation tool using testbench.v as the top module. For example,
using Verilator, you can use the following commands to run simulation:
verilator testbench.v --binary --timing -j $(nproc) --threads $(nproc) -Wno-UNOPTTHREADS -O3
./obj_dir/Vtestbench
If you want to play with the code, it is recommended that you spin up a sbt
daemon by running "sbt" and type in "run" each time you modify the code,
instead of running "sbt run" each time, to take full advantage of incremental
compilation provided by sbt.
+----------------------+
| HOW TO RUN SYNTHESIS |
+----------------------+
1. Make sure Vivado is installed.
2. Create a new project in Vivado.
3. Set mode to "codegen" in config.scala and make sure codegen.module is
"new Cpu" (not "new TestModule").
4. Generate Verilog code using the command "sbt run".
5. Copy the Verilog files in src/main/resources EXCEPT testbench.v, and copy
Cpu.v generated in step 4, to the Vivado project you have just created.
6. Run synthesis in Vivado.
+---------------+
| TESTING NOTES |
+---------------+
Icarus Verilog is unable to simulate some patterns in the CPU design, so please
use Verilator.
+-----------+
| HCI NOTES |
+-----------+
Some modifications are made to the HCI to better accomodate debugging.
The 7-segment display is used to show the current program counter. You need to
press the left button (BTNL) to update the display (or else it flashes too
quickly that you won't be able to see anything.) There are two sources of PC
data, and switch SW1 is used to control which is shown. Turn off SW1 to show
the last PC committed by the reorder buffer; turn on to show the current PC
being fetched by the instruction fetch unit. In RV32, the address is 32-bit,
but the display could only show a 16-bit hexadecimal number. SW0 is used to
toggle which 16 bits are shown. Switch on to see the high 16 bits (which are
usually just zeroes), and switch off to see low 16 bits. The switches will not
trigger display updates; you need to press the left button after switching.
Note that the last committed PC is initialized to be 0xDEADBEEF.
The LEDs are used to show the status of some design units:
LD0 on --> debug break
LD1 on --> io buffer full
LD2 on --> store buffer full
LD3 on --> load buffer full
LD4 on --> reservation station (for ALU) full
LD5 on --> reorder buffer full
LD6 on --> load/store queue full
The central button (BTNC) is used as the reset button as usual.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - panic-coursework/fakecpu · GitHub
Skip to content
This repository was archived by the owner on Feb 5, 2023. It is now read-only.

Latest commit

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

+-----------------------+
| HOW TO RUN SIMULATION |
+-----------------------+
There are two ways to run simulation: using chiseltest, the built-in testing
method for Chisel; or using Verilator (or some other verilog simulation tool)
to run simulation manually.
You will need sbt, the Scala build tool, to compile the code. Before
simulating, please edit config.scala to make sure flags are set properly. You
will need to place the machine code to run in hexadecimal format on a file
named "data.data" in the current working directory. Input is read from
"infile.data" under cwd, also in hexadecimal format. These files are
configurable from config.scala, under p.testModule.
To run simulation using chiseltest:
1. You need to have Verilator installed.
2. Set mode to "test" in config.scala.
3. Run the test using the command "sbt run".
To run simulation manually:
1. Set mode to "codegen" in config.scala and make sure codegen.module is
"new TestModule" (not "new Cpu").
2. Generate Verilog code using the command "sbt run".
3. Copy src/main/resources/testbench.v to the current directory.
4. Run the simulation tool using testbench.v as the top module. For example,
using Verilator, you can use the following commands to run simulation:
verilator testbench.v --binary --timing -j $(nproc) --threads $(nproc) -Wno-UNOPTTHREADS -O3
./obj_dir/Vtestbench
If you want to play with the code, it is recommended that you spin up a sbt
daemon by running "sbt" and type in "run" each time you modify the code,
instead of running "sbt run" each time, to take full advantage of incremental
compilation provided by sbt.
+----------------------+
| HOW TO RUN SYNTHESIS |
+----------------------+
1. Make sure Vivado is installed.
2. Create a new project in Vivado.
3. Set mode to "codegen" in config.scala and make sure codegen.module is
"new Cpu" (not "new TestModule").
4. Generate Verilog code using the command "sbt run".
5. Copy the Verilog files in src/main/resources EXCEPT testbench.v, and copy
Cpu.v generated in step 4, to the Vivado project you have just created.
6. Run synthesis in Vivado.
+---------------+
| TESTING NOTES |
+---------------+
Icarus Verilog is unable to simulate some patterns in the CPU design, so please
use Verilator.
+-----------+
| HCI NOTES |
+-----------+
Some modifications are made to the HCI to better accomodate debugging.
The 7-segment display is used to show the current program counter. You need to
press the left button (BTNL) to update the display (or else it flashes too
quickly that you won't be able to see anything.) There are two sources of PC
data, and switch SW1 is used to control which is shown. Turn off SW1 to show
the last PC committed by the reorder buffer; turn on to show the current PC
being fetched by the instruction fetch unit. In RV32, the address is 32-bit,
but the display could only show a 16-bit hexadecimal number. SW0 is used to
toggle which 16 bits are shown. Switch on to see the high 16 bits (which are
usually just zeroes), and switch off to see low 16 bits. The switches will not
trigger display updates; you need to press the left button after switching.
Note that the last committed PC is initialized to be 0xDEADBEEF.
The LEDs are used to show the status of some design units:
LD0 on --> debug break
LD1 on --> io buffer full
LD2 on --> store buffer full
LD3 on --> load buffer full
LD4 on --> reservation station (for ALU) full
LD5 on --> reorder buffer full
LD6 on --> load/store queue full
The central button (BTNC) is used as the reset button as usual.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - panic-coursework/fakecpu · GitHub
Skip to content
This repository was archived by the owner on Feb 5, 2023. It is now read-only.

Latest commit

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

+-----------------------+
| HOW TO RUN SIMULATION |
+-----------------------+
There are two ways to run simulation: using chiseltest, the built-in testing
method for Chisel; or using Verilator (or some other verilog simulation tool)
to run simulation manually.
You will need sbt, the Scala build tool, to compile the code. Before
simulating, please edit config.scala to make sure flags are set properly. You
will need to place the machine code to run in hexadecimal format on a file
named "data.data" in the current working directory. Input is read from
"infile.data" under cwd, also in hexadecimal format. These files are
configurable from config.scala, under p.testModule.
To run simulation using chiseltest:
1. You need to have Verilator installed.
2. Set mode to "test" in config.scala.
3. Run the test using the command "sbt run".
To run simulation manually:
1. Set mode to "codegen" in config.scala and make sure codegen.module is
"new TestModule" (not "new Cpu").
2. Generate Verilog code using the command "sbt run".
3. Copy src/main/resources/testbench.v to the current directory.
4. Run the simulation tool using testbench.v as the top module. For example,
using Verilator, you can use the following commands to run simulation:
verilator testbench.v --binary --timing -j $(nproc) --threads $(nproc) -Wno-UNOPTTHREADS -O3
./obj_dir/Vtestbench
If you want to play with the code, it is recommended that you spin up a sbt
daemon by running "sbt" and type in "run" each time you modify the code,
instead of running "sbt run" each time, to take full advantage of incremental
compilation provided by sbt.
+----------------------+
| HOW TO RUN SYNTHESIS |
+----------------------+
1. Make sure Vivado is installed.
2. Create a new project in Vivado.
3. Set mode to "codegen" in config.scala and make sure codegen.module is
"new Cpu" (not "new TestModule").
4. Generate Verilog code using the command "sbt run".
5. Copy the Verilog files in src/main/resources EXCEPT testbench.v, and copy
Cpu.v generated in step 4, to the Vivado project you have just created.
6. Run synthesis in Vivado.
+---------------+
| TESTING NOTES |
+---------------+
Icarus Verilog is unable to simulate some patterns in the CPU design, so please
use Verilator.
+-----------+
| HCI NOTES |
+-----------+
Some modifications are made to the HCI to better accomodate debugging.
The 7-segment display is used to show the current program counter. You need to
press the left button (BTNL) to update the display (or else it flashes too
quickly that you won't be able to see anything.) There are two sources of PC
data, and switch SW1 is used to control which is shown. Turn off SW1 to show
the last PC committed by the reorder buffer; turn on to show the current PC
being fetched by the instruction fetch unit. In RV32, the address is 32-bit,
but the display could only show a 16-bit hexadecimal number. SW0 is used to
toggle which 16 bits are shown. Switch on to see the high 16 bits (which are
usually just zeroes), and switch off to see low 16 bits. The switches will not
trigger display updates; you need to press the left button after switching.
Note that the last committed PC is initialized to be 0xDEADBEEF.
The LEDs are used to show the status of some design units:
LD0 on --> debug break
LD1 on --> io buffer full
LD2 on --> store buffer full
LD3 on --> load buffer full
LD4 on --> reservation station (for ALU) full
LD5 on --> reorder buffer full
LD6 on --> load/store queue full
The central button (BTNC) is used as the reset button as usual.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages