Adding a Verilog example using PicoSoC - #39

Open
gatecat wants to merge 1 commit into
mainfrom
add-verilog-example
Open

Adding a Verilog example using PicoSoC#39
gatecat wants to merge 1 commit into
mainfrom
add-verilog-example

Conversation

@gatecat

@gatecatgatecat commented May 14, 2025

Copy link
Copy Markdown
Contributor

Everything else is ready for review, although I have a couple of questions:

  • should this be in this repo at all, or a different one?
  • should the top level wrapper still use amaranth-orchard pin signatures, as it does now, or is it clearer if it defines the pin signatures in the wrapper too (e.g. as an example for people who want to wrap Verilog with other types of IO)

@gatecat
gatecat requested a review from robtaylorMay 14, 2025 07:16
@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from b426930 to f9a4d9cCompareMay 14, 2025 08:42
@robtaylor

Copy link
Copy Markdown
Contributor

I think it belongs here. Defining the iopins here is better as well.

Let's not add a makefile - it was removed from the others.
Trying to keep things as windows compatible as we can, though still need to test.

@gatecat

Copy link
Copy Markdown
ContributorAuthor

Let's not add a makefile - it was removed from the others.

Seems like it wasn't? e.g. https://github.com/ChipFlow/chipflow-examples/blob/main/mcu_soc/Makefile

@gatecat
gatecatforce-pushed the add-verilog-example branch from f9a4d9c to 7d0876eCompareMay 14, 2025 14:44
@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from 91ced06 to 8e2c516CompareJune 23, 2025 07:55
@robtaylor
robtaylorforce-pushed the add-verilog-example branch 2 times, most recently from 91ced06 to 210cfbdCompareJune 23, 2025 07:58
@gatecat
gatecatforce-pushed the add-verilog-example branch from 210cfbd to e7dde63CompareJuly 14, 2025 08:16
@gatecat
gatecat marked this pull request as ready for review July 14, 2025 08:16
@gatecat
gatecatforce-pushed the add-verilog-example branch from e7dde63 to e64bf92CompareJuly 14, 2025 08:17
@gatecat

Copy link
Copy Markdown
ContributorAuthor

Hopefully once ChipFlow/chipflow-lib#129 is in this is ready to go!

@gatecat
gatecatforce-pushed the add-verilog-example branch from e64bf92 to 90cb442CompareJuly 14, 2025 10:13
Comment on lines +50 to +63
base = os.path.dirname(__file__)

verilog_sources = [
f"{base}/picosoc_asic_top.v",
f"{base}/picorv32/picosoc/spimemio.v",
f"{base}/picorv32/picosoc/simpleuart.v",
f"{base}/picorv32/picosoc/picosoc.v",
f"{base}/picorv32/picorv32.v",
]

for verilog_file in verilog_sources:
with open(verilog_file, 'r') as f:
platform.add_file(verilog_file, f)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just wondering, could we have a chipflow.toml section to include external code, or maybe use a seperate toml file for defining the import?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any progress on this?

Comment on lines +65 to +93
# Clock and reset
i_clk=ClockSignal(),
i_resetn=~ResetSignal(),

# UART
o_ser_tx=self.uart_0.tx.o,
i_ser_rx=self.uart_0.rx.i,

# SPI flash
o_flash_csb=self.flash.csn.o,
o_flash_clk=self.flash.clk.o,

o_flash_io0_oe=self.flash.d.oe[0],
o_flash_io1_oe=self.flash.d.oe[1],
o_flash_io2_oe=self.flash.d.oe[2],
o_flash_io3_oe=self.flash.d.oe[3],

o_flash_io0_do=self.flash.d.o[0],
o_flash_io1_do=self.flash.d.o[1],
o_flash_io2_do=self.flash.d.o[2],
o_flash_io3_do=self.flash.d.o[3],

i_flash_io0_di=self.flash.d.i[0],
i_flash_io1_di=self.flash.d.i[1],
i_flash_io2_di=self.flash.d.i[2],
i_flash_io3_di=self.flash.d.i[3],

# LEDs
o_leds=self.gpio_0.gpio.o

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, might be something worth putting in a toml description?

@gatecat
gatecatforce-pushed the add-verilog-example branch 4 times, most recently from 6b8a786 to 1e3fed9CompareSeptember 16, 2025 07:12
@gatecat

Copy link
Copy Markdown
ContributorAuthor

@robtaylor as "proper" Verilog support has turned into a bigger project, shall we at least get this merged in its current form (I've rebased and updated it, I don't think any of the other PRs should affect it) so we have some kind of Verilog example to point to?

@robtaylor

Copy link
Copy Markdown
Contributor

@robtaylor as "proper" Verilog support has turned into a bigger project, shall we at least get this merged in its current form (I've rebased and updated it, I don't think any of the other PRs should affect it) so we have some kind of Verilog example to point to?

Yes @gatecat , sounds sensible to me. Can you rebase now software-rework has landed?

@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from 9a82105 to 8086479CompareSeptember 29, 2025 12:45
@gatecat

Copy link
Copy Markdown
ContributorAuthor

Rebasing ended up a bit more complex than expected, but with ChipFlow/chipflow-lib#143, I think this should now be working

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

don't think this should be necessary now?

if the chipflow-lib impl doesnt do something you need, lets fix that

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be a ton of work to get software building working with Verilog, and I don't think everyone is even going to want this

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fair enough, see other comment..

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the flashio/cmd_read_*/set_flash parts here be in the QSPIFlash driver?
Maybe fix up chipflow-lib if drivers need a way to put stuff in start.S?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The picosoc qspi flash core isn't compatible with the one in chipflow-digital-ip so different drivers is needed

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah, i see. this is fine for now then i guess, as you're overriding software build. We should have a bit of a session on making sure we can have design specific drivers work alongside imported drivers.

}

void print_dec(uint32_t v)
{

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not something like:
do // run at least once to print 0
{
d = x % 10;
stack[sp++] = d + '0'; // push
x /= 10;
} while (x);

?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know, this was just taken from claire's picosoc code as-is

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how odd... Maybe note its origin in a comment?

Comment on lines +50 to +63
base = os.path.dirname(__file__)

verilog_sources = [
f"{base}/picosoc_asic_top.v",
f"{base}/picorv32/picosoc/spimemio.v",
f"{base}/picorv32/picosoc/simpleuart.v",
f"{base}/picorv32/picosoc/picosoc.v",
f"{base}/picorv32/picorv32.v",
]

for verilog_file in verilog_sources:
with open(verilog_file, 'r') as f:
platform.add_file(verilog_file, f)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any progress on this?

@robtaylor

Copy link
Copy Markdown
Contributor

Also seems this is using the long-deprecated PinSignature?? Please check you're working against a current chipflow-lib

@gatecat

Copy link
Copy Markdown
ContributorAuthor

Hm, where is that, I thought I moved to using all the predefined signatures in chipflow-lib so sim auto-generation works, but maybe some old code got left in by mistake...

@gatecat

Copy link
Copy Markdown
ContributorAuthor

I also don't touch pyproject.toml or pdm.lock in this PR so CI (where the tests pass, only the known issue of minimal timing out in the cloud builder causes a failure) should be using latest chipflow-lib already

@robtaylor

Copy link
Copy Markdown
Contributor

Maybe my local branch got messed up somehow, let me check it!

Signed-off-by: gatecat <gatecat@ds0.me>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@gatecat@robtaylor
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Adding a Verilog example using PicoSoC - #39

Open
gatecat wants to merge 1 commit into
mainfrom
add-verilog-example
Open

Adding a Verilog example using PicoSoC#39
gatecat wants to merge 1 commit into
mainfrom
add-verilog-example

Conversation

@gatecat

@gatecatgatecat commented May 14, 2025

Copy link
Copy Markdown
Contributor

Everything else is ready for review, although I have a couple of questions:

  • should this be in this repo at all, or a different one?
  • should the top level wrapper still use amaranth-orchard pin signatures, as it does now, or is it clearer if it defines the pin signatures in the wrapper too (e.g. as an example for people who want to wrap Verilog with other types of IO)

@gatecat
gatecat requested a review from robtaylorMay 14, 2025 07:16
@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from b426930 to f9a4d9cCompareMay 14, 2025 08:42
@robtaylor

Copy link
Copy Markdown
Contributor

I think it belongs here. Defining the iopins here is better as well.

Let's not add a makefile - it was removed from the others.
Trying to keep things as windows compatible as we can, though still need to test.

@gatecat

Copy link
Copy Markdown
ContributorAuthor

Let's not add a makefile - it was removed from the others.

Seems like it wasn't? e.g. https://github.com/ChipFlow/chipflow-examples/blob/main/mcu_soc/Makefile

@gatecat
gatecatforce-pushed the add-verilog-example branch from f9a4d9c to 7d0876eCompareMay 14, 2025 14:44
@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from 91ced06 to 8e2c516CompareJune 23, 2025 07:55
@robtaylor
robtaylorforce-pushed the add-verilog-example branch 2 times, most recently from 91ced06 to 210cfbdCompareJune 23, 2025 07:58
@gatecat
gatecatforce-pushed the add-verilog-example branch from 210cfbd to e7dde63CompareJuly 14, 2025 08:16
@gatecat
gatecat marked this pull request as ready for review July 14, 2025 08:16
@gatecat
gatecatforce-pushed the add-verilog-example branch from e7dde63 to e64bf92CompareJuly 14, 2025 08:17
@gatecat

Copy link
Copy Markdown
ContributorAuthor

Hopefully once ChipFlow/chipflow-lib#129 is in this is ready to go!

@gatecat
gatecatforce-pushed the add-verilog-example branch from e64bf92 to 90cb442CompareJuly 14, 2025 10:13
Comment on lines +50 to +63
base = os.path.dirname(__file__)

verilog_sources = [
f"{base}/picosoc_asic_top.v",
f"{base}/picorv32/picosoc/spimemio.v",
f"{base}/picorv32/picosoc/simpleuart.v",
f"{base}/picorv32/picosoc/picosoc.v",
f"{base}/picorv32/picorv32.v",
]

for verilog_file in verilog_sources:
with open(verilog_file, 'r') as f:
platform.add_file(verilog_file, f)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just wondering, could we have a chipflow.toml section to include external code, or maybe use a seperate toml file for defining the import?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any progress on this?

Comment on lines +65 to +93
# Clock and reset
i_clk=ClockSignal(),
i_resetn=~ResetSignal(),

# UART
o_ser_tx=self.uart_0.tx.o,
i_ser_rx=self.uart_0.rx.i,

# SPI flash
o_flash_csb=self.flash.csn.o,
o_flash_clk=self.flash.clk.o,

o_flash_io0_oe=self.flash.d.oe[0],
o_flash_io1_oe=self.flash.d.oe[1],
o_flash_io2_oe=self.flash.d.oe[2],
o_flash_io3_oe=self.flash.d.oe[3],

o_flash_io0_do=self.flash.d.o[0],
o_flash_io1_do=self.flash.d.o[1],
o_flash_io2_do=self.flash.d.o[2],
o_flash_io3_do=self.flash.d.o[3],

i_flash_io0_di=self.flash.d.i[0],
i_flash_io1_di=self.flash.d.i[1],
i_flash_io2_di=self.flash.d.i[2],
i_flash_io3_di=self.flash.d.i[3],

# LEDs
o_leds=self.gpio_0.gpio.o

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, might be something worth putting in a toml description?

@gatecat
gatecatforce-pushed the add-verilog-example branch 4 times, most recently from 6b8a786 to 1e3fed9CompareSeptember 16, 2025 07:12
@gatecat

Copy link
Copy Markdown
ContributorAuthor

@robtaylor as "proper" Verilog support has turned into a bigger project, shall we at least get this merged in its current form (I've rebased and updated it, I don't think any of the other PRs should affect it) so we have some kind of Verilog example to point to?

@robtaylor

Copy link
Copy Markdown
Contributor

@robtaylor as "proper" Verilog support has turned into a bigger project, shall we at least get this merged in its current form (I've rebased and updated it, I don't think any of the other PRs should affect it) so we have some kind of Verilog example to point to?

Yes @gatecat , sounds sensible to me. Can you rebase now software-rework has landed?

@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from 9a82105 to 8086479CompareSeptember 29, 2025 12:45
@gatecat

Copy link
Copy Markdown
ContributorAuthor

Rebasing ended up a bit more complex than expected, but with ChipFlow/chipflow-lib#143, I think this should now be working

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

don't think this should be necessary now?

if the chipflow-lib impl doesnt do something you need, lets fix that

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be a ton of work to get software building working with Verilog, and I don't think everyone is even going to want this

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fair enough, see other comment..

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the flashio/cmd_read_*/set_flash parts here be in the QSPIFlash driver?
Maybe fix up chipflow-lib if drivers need a way to put stuff in start.S?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The picosoc qspi flash core isn't compatible with the one in chipflow-digital-ip so different drivers is needed

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah, i see. this is fine for now then i guess, as you're overriding software build. We should have a bit of a session on making sure we can have design specific drivers work alongside imported drivers.

}

void print_dec(uint32_t v)
{

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not something like:
do // run at least once to print 0
{
d = x % 10;
stack[sp++] = d + '0'; // push
x /= 10;
} while (x);

?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know, this was just taken from claire's picosoc code as-is

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how odd... Maybe note its origin in a comment?

Comment on lines +50 to +63
base = os.path.dirname(__file__)

verilog_sources = [
f"{base}/picosoc_asic_top.v",
f"{base}/picorv32/picosoc/spimemio.v",
f"{base}/picorv32/picosoc/simpleuart.v",
f"{base}/picorv32/picosoc/picosoc.v",
f"{base}/picorv32/picorv32.v",
]

for verilog_file in verilog_sources:
with open(verilog_file, 'r') as f:
platform.add_file(verilog_file, f)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any progress on this?

@robtaylor

Copy link
Copy Markdown
Contributor

Also seems this is using the long-deprecated PinSignature?? Please check you're working against a current chipflow-lib

@gatecat

Copy link
Copy Markdown
ContributorAuthor

Hm, where is that, I thought I moved to using all the predefined signatures in chipflow-lib so sim auto-generation works, but maybe some old code got left in by mistake...

@gatecat

Copy link
Copy Markdown
ContributorAuthor

I also don't touch pyproject.toml or pdm.lock in this PR so CI (where the tests pass, only the known issue of minimal timing out in the cloud builder causes a failure) should be using latest chipflow-lib already

@robtaylor

Copy link
Copy Markdown
Contributor

Maybe my local branch got messed up somehow, let me check it!

Signed-off-by: gatecat <gatecat@ds0.me>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@gatecat@robtaylor
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Adding a Verilog example using PicoSoC - #39

Open
gatecat wants to merge 1 commit into
mainfrom
add-verilog-example
Open

Adding a Verilog example using PicoSoC#39
gatecat wants to merge 1 commit into
mainfrom
add-verilog-example

Conversation

@gatecat

@gatecatgatecat commented May 14, 2025

Copy link
Copy Markdown
Contributor

Everything else is ready for review, although I have a couple of questions:

  • should this be in this repo at all, or a different one?
  • should the top level wrapper still use amaranth-orchard pin signatures, as it does now, or is it clearer if it defines the pin signatures in the wrapper too (e.g. as an example for people who want to wrap Verilog with other types of IO)

@gatecat
gatecat requested a review from robtaylorMay 14, 2025 07:16
@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from b426930 to f9a4d9cCompareMay 14, 2025 08:42
@robtaylor

Copy link
Copy Markdown
Contributor

I think it belongs here. Defining the iopins here is better as well.

Let's not add a makefile - it was removed from the others.
Trying to keep things as windows compatible as we can, though still need to test.

@gatecat

Copy link
Copy Markdown
ContributorAuthor

Let's not add a makefile - it was removed from the others.

Seems like it wasn't? e.g. https://github.com/ChipFlow/chipflow-examples/blob/main/mcu_soc/Makefile

@gatecat
gatecatforce-pushed the add-verilog-example branch from f9a4d9c to 7d0876eCompareMay 14, 2025 14:44
@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from 91ced06 to 8e2c516CompareJune 23, 2025 07:55
@robtaylor
robtaylorforce-pushed the add-verilog-example branch 2 times, most recently from 91ced06 to 210cfbdCompareJune 23, 2025 07:58
@gatecat
gatecatforce-pushed the add-verilog-example branch from 210cfbd to e7dde63CompareJuly 14, 2025 08:16
@gatecat
gatecat marked this pull request as ready for review July 14, 2025 08:16
@gatecat
gatecatforce-pushed the add-verilog-example branch from e7dde63 to e64bf92CompareJuly 14, 2025 08:17
@gatecat

Copy link
Copy Markdown
ContributorAuthor

Hopefully once ChipFlow/chipflow-lib#129 is in this is ready to go!

@gatecat
gatecatforce-pushed the add-verilog-example branch from e64bf92 to 90cb442CompareJuly 14, 2025 10:13
Comment on lines +50 to +63
base = os.path.dirname(__file__)

verilog_sources = [
f"{base}/picosoc_asic_top.v",
f"{base}/picorv32/picosoc/spimemio.v",
f"{base}/picorv32/picosoc/simpleuart.v",
f"{base}/picorv32/picosoc/picosoc.v",
f"{base}/picorv32/picorv32.v",
]

for verilog_file in verilog_sources:
with open(verilog_file, 'r') as f:
platform.add_file(verilog_file, f)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just wondering, could we have a chipflow.toml section to include external code, or maybe use a seperate toml file for defining the import?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any progress on this?

Comment on lines +65 to +93
# Clock and reset
i_clk=ClockSignal(),
i_resetn=~ResetSignal(),

# UART
o_ser_tx=self.uart_0.tx.o,
i_ser_rx=self.uart_0.rx.i,

# SPI flash
o_flash_csb=self.flash.csn.o,
o_flash_clk=self.flash.clk.o,

o_flash_io0_oe=self.flash.d.oe[0],
o_flash_io1_oe=self.flash.d.oe[1],
o_flash_io2_oe=self.flash.d.oe[2],
o_flash_io3_oe=self.flash.d.oe[3],

o_flash_io0_do=self.flash.d.o[0],
o_flash_io1_do=self.flash.d.o[1],
o_flash_io2_do=self.flash.d.o[2],
o_flash_io3_do=self.flash.d.o[3],

i_flash_io0_di=self.flash.d.i[0],
i_flash_io1_di=self.flash.d.i[1],
i_flash_io2_di=self.flash.d.i[2],
i_flash_io3_di=self.flash.d.i[3],

# LEDs
o_leds=self.gpio_0.gpio.o

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, might be something worth putting in a toml description?

@gatecat
gatecatforce-pushed the add-verilog-example branch 4 times, most recently from 6b8a786 to 1e3fed9CompareSeptember 16, 2025 07:12
@gatecat

Copy link
Copy Markdown
ContributorAuthor

@robtaylor as "proper" Verilog support has turned into a bigger project, shall we at least get this merged in its current form (I've rebased and updated it, I don't think any of the other PRs should affect it) so we have some kind of Verilog example to point to?

@robtaylor

Copy link
Copy Markdown
Contributor

@robtaylor as "proper" Verilog support has turned into a bigger project, shall we at least get this merged in its current form (I've rebased and updated it, I don't think any of the other PRs should affect it) so we have some kind of Verilog example to point to?

Yes @gatecat , sounds sensible to me. Can you rebase now software-rework has landed?

@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from 9a82105 to 8086479CompareSeptember 29, 2025 12:45
@gatecat

Copy link
Copy Markdown
ContributorAuthor

Rebasing ended up a bit more complex than expected, but with ChipFlow/chipflow-lib#143, I think this should now be working

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

don't think this should be necessary now?

if the chipflow-lib impl doesnt do something you need, lets fix that

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be a ton of work to get software building working with Verilog, and I don't think everyone is even going to want this

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fair enough, see other comment..

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the flashio/cmd_read_*/set_flash parts here be in the QSPIFlash driver?
Maybe fix up chipflow-lib if drivers need a way to put stuff in start.S?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The picosoc qspi flash core isn't compatible with the one in chipflow-digital-ip so different drivers is needed

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah, i see. this is fine for now then i guess, as you're overriding software build. We should have a bit of a session on making sure we can have design specific drivers work alongside imported drivers.

}

void print_dec(uint32_t v)
{

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not something like:
do // run at least once to print 0
{
d = x % 10;
stack[sp++] = d + '0'; // push
x /= 10;
} while (x);

?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know, this was just taken from claire's picosoc code as-is

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how odd... Maybe note its origin in a comment?

Comment on lines +50 to +63
base = os.path.dirname(__file__)

verilog_sources = [
f"{base}/picosoc_asic_top.v",
f"{base}/picorv32/picosoc/spimemio.v",
f"{base}/picorv32/picosoc/simpleuart.v",
f"{base}/picorv32/picosoc/picosoc.v",
f"{base}/picorv32/picorv32.v",
]

for verilog_file in verilog_sources:
with open(verilog_file, 'r') as f:
platform.add_file(verilog_file, f)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any progress on this?

@robtaylor

Copy link
Copy Markdown
Contributor

Also seems this is using the long-deprecated PinSignature?? Please check you're working against a current chipflow-lib

@gatecat

Copy link
Copy Markdown
ContributorAuthor

Hm, where is that, I thought I moved to using all the predefined signatures in chipflow-lib so sim auto-generation works, but maybe some old code got left in by mistake...

@gatecat

Copy link
Copy Markdown
ContributorAuthor

I also don't touch pyproject.toml or pdm.lock in this PR so CI (where the tests pass, only the known issue of minimal timing out in the cloud builder causes a failure) should be using latest chipflow-lib already

@robtaylor

Copy link
Copy Markdown
Contributor

Maybe my local branch got messed up somehow, let me check it!

Signed-off-by: gatecat <gatecat@ds0.me>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

Adding a Verilog example using PicoSoC - #39

Open
gatecat wants to merge 1 commit into
mainfrom
add-verilog-example
Open

Adding a Verilog example using PicoSoC#39
gatecat wants to merge 1 commit into
mainfrom
add-verilog-example

Conversation

@gatecat

@gatecatgatecat commented May 14, 2025

Copy link
Copy Markdown
Contributor

Everything else is ready for review, although I have a couple of questions:

  • should this be in this repo at all, or a different one?
  • should the top level wrapper still use amaranth-orchard pin signatures, as it does now, or is it clearer if it defines the pin signatures in the wrapper too (e.g. as an example for people who want to wrap Verilog with other types of IO)

@gatecat
gatecat requested a review from robtaylorMay 14, 2025 07:16
@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from b426930 to f9a4d9cCompareMay 14, 2025 08:42
@robtaylor

Copy link
Copy Markdown
Contributor

I think it belongs here. Defining the iopins here is better as well.

Let's not add a makefile - it was removed from the others.
Trying to keep things as windows compatible as we can, though still need to test.

@gatecat

Copy link
Copy Markdown
ContributorAuthor

Let's not add a makefile - it was removed from the others.

Seems like it wasn't? e.g. https://github.com/ChipFlow/chipflow-examples/blob/main/mcu_soc/Makefile

@gatecat
gatecatforce-pushed the add-verilog-example branch from f9a4d9c to 7d0876eCompareMay 14, 2025 14:44
@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from 91ced06 to 8e2c516CompareJune 23, 2025 07:55
@robtaylor
robtaylorforce-pushed the add-verilog-example branch 2 times, most recently from 91ced06 to 210cfbdCompareJune 23, 2025 07:58
@gatecat
gatecatforce-pushed the add-verilog-example branch from 210cfbd to e7dde63CompareJuly 14, 2025 08:16
@gatecat
gatecat marked this pull request as ready for review July 14, 2025 08:16
@gatecat
gatecatforce-pushed the add-verilog-example branch from e7dde63 to e64bf92CompareJuly 14, 2025 08:17
@gatecat

Copy link
Copy Markdown
ContributorAuthor

Hopefully once ChipFlow/chipflow-lib#129 is in this is ready to go!

@gatecat
gatecatforce-pushed the add-verilog-example branch from e64bf92 to 90cb442CompareJuly 14, 2025 10:13
Comment on lines +50 to +63
base = os.path.dirname(__file__)

verilog_sources = [
f"{base}/picosoc_asic_top.v",
f"{base}/picorv32/picosoc/spimemio.v",
f"{base}/picorv32/picosoc/simpleuart.v",
f"{base}/picorv32/picosoc/picosoc.v",
f"{base}/picorv32/picorv32.v",
]

for verilog_file in verilog_sources:
with open(verilog_file, 'r') as f:
platform.add_file(verilog_file, f)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just wondering, could we have a chipflow.toml section to include external code, or maybe use a seperate toml file for defining the import?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any progress on this?

Comment on lines +65 to +93
# Clock and reset
i_clk=ClockSignal(),
i_resetn=~ResetSignal(),

# UART
o_ser_tx=self.uart_0.tx.o,
i_ser_rx=self.uart_0.rx.i,

# SPI flash
o_flash_csb=self.flash.csn.o,
o_flash_clk=self.flash.clk.o,

o_flash_io0_oe=self.flash.d.oe[0],
o_flash_io1_oe=self.flash.d.oe[1],
o_flash_io2_oe=self.flash.d.oe[2],
o_flash_io3_oe=self.flash.d.oe[3],

o_flash_io0_do=self.flash.d.o[0],
o_flash_io1_do=self.flash.d.o[1],
o_flash_io2_do=self.flash.d.o[2],
o_flash_io3_do=self.flash.d.o[3],

i_flash_io0_di=self.flash.d.i[0],
i_flash_io1_di=self.flash.d.i[1],
i_flash_io2_di=self.flash.d.i[2],
i_flash_io3_di=self.flash.d.i[3],

# LEDs
o_leds=self.gpio_0.gpio.o

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, might be something worth putting in a toml description?

@gatecat
gatecatforce-pushed the add-verilog-example branch 4 times, most recently from 6b8a786 to 1e3fed9CompareSeptember 16, 2025 07:12
@gatecat

Copy link
Copy Markdown
ContributorAuthor

@robtaylor as "proper" Verilog support has turned into a bigger project, shall we at least get this merged in its current form (I've rebased and updated it, I don't think any of the other PRs should affect it) so we have some kind of Verilog example to point to?

@robtaylor

Copy link
Copy Markdown
Contributor

@robtaylor as "proper" Verilog support has turned into a bigger project, shall we at least get this merged in its current form (I've rebased and updated it, I don't think any of the other PRs should affect it) so we have some kind of Verilog example to point to?

Yes @gatecat , sounds sensible to me. Can you rebase now software-rework has landed?

@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from 9a82105 to 8086479CompareSeptember 29, 2025 12:45
@gatecat

Copy link
Copy Markdown
ContributorAuthor

Rebasing ended up a bit more complex than expected, but with ChipFlow/chipflow-lib#143, I think this should now be working

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

don't think this should be necessary now?

if the chipflow-lib impl doesnt do something you need, lets fix that

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be a ton of work to get software building working with Verilog, and I don't think everyone is even going to want this

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fair enough, see other comment..

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the flashio/cmd_read_*/set_flash parts here be in the QSPIFlash driver?
Maybe fix up chipflow-lib if drivers need a way to put stuff in start.S?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The picosoc qspi flash core isn't compatible with the one in chipflow-digital-ip so different drivers is needed

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah, i see. this is fine for now then i guess, as you're overriding software build. We should have a bit of a session on making sure we can have design specific drivers work alongside imported drivers.

}

void print_dec(uint32_t v)
{

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not something like:
do // run at least once to print 0
{
d = x % 10;
stack[sp++] = d + '0'; // push
x /= 10;
} while (x);

?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know, this was just taken from claire's picosoc code as-is

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how odd... Maybe note its origin in a comment?

Comment on lines +50 to +63
base = os.path.dirname(__file__)

verilog_sources = [
f"{base}/picosoc_asic_top.v",
f"{base}/picorv32/picosoc/spimemio.v",
f"{base}/picorv32/picosoc/simpleuart.v",
f"{base}/picorv32/picosoc/picosoc.v",
f"{base}/picorv32/picorv32.v",
]

for verilog_file in verilog_sources:
with open(verilog_file, 'r') as f:
platform.add_file(verilog_file, f)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any progress on this?

@robtaylor

Copy link
Copy Markdown
Contributor

Also seems this is using the long-deprecated PinSignature?? Please check you're working against a current chipflow-lib

@gatecat

Copy link
Copy Markdown
ContributorAuthor

Hm, where is that, I thought I moved to using all the predefined signatures in chipflow-lib so sim auto-generation works, but maybe some old code got left in by mistake...

@gatecat

Copy link
Copy Markdown
ContributorAuthor

I also don't touch pyproject.toml or pdm.lock in this PR so CI (where the tests pass, only the known issue of minimal timing out in the cloud builder causes a failure) should be using latest chipflow-lib already

@robtaylor

Copy link
Copy Markdown
Contributor

Maybe my local branch got messed up somehow, let me check it!

Signed-off-by: gatecat <gatecat@ds0.me>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

Adding a Verilog example using PicoSoC - #39

Open
gatecat wants to merge 1 commit into
mainfrom
add-verilog-example
Open

Adding a Verilog example using PicoSoC#39
gatecat wants to merge 1 commit into
mainfrom
add-verilog-example

Conversation

@gatecat

@gatecatgatecat commented May 14, 2025

Copy link
Copy Markdown
Contributor

Everything else is ready for review, although I have a couple of questions:

  • should this be in this repo at all, or a different one?
  • should the top level wrapper still use amaranth-orchard pin signatures, as it does now, or is it clearer if it defines the pin signatures in the wrapper too (e.g. as an example for people who want to wrap Verilog with other types of IO)

@gatecat
gatecat requested a review from robtaylorMay 14, 2025 07:16
@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from b426930 to f9a4d9cCompareMay 14, 2025 08:42
@robtaylor

Copy link
Copy Markdown
Contributor

I think it belongs here. Defining the iopins here is better as well.

Let's not add a makefile - it was removed from the others.
Trying to keep things as windows compatible as we can, though still need to test.

@gatecat

Copy link
Copy Markdown
ContributorAuthor

Let's not add a makefile - it was removed from the others.

Seems like it wasn't? e.g. https://github.com/ChipFlow/chipflow-examples/blob/main/mcu_soc/Makefile

@gatecat
gatecatforce-pushed the add-verilog-example branch from f9a4d9c to 7d0876eCompareMay 14, 2025 14:44
@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from 91ced06 to 8e2c516CompareJune 23, 2025 07:55
@robtaylor
robtaylorforce-pushed the add-verilog-example branch 2 times, most recently from 91ced06 to 210cfbdCompareJune 23, 2025 07:58
@gatecat
gatecatforce-pushed the add-verilog-example branch from 210cfbd to e7dde63CompareJuly 14, 2025 08:16
@gatecat
gatecat marked this pull request as ready for review July 14, 2025 08:16
@gatecat
gatecatforce-pushed the add-verilog-example branch from e7dde63 to e64bf92CompareJuly 14, 2025 08:17
@gatecat

Copy link
Copy Markdown
ContributorAuthor

Hopefully once ChipFlow/chipflow-lib#129 is in this is ready to go!

@gatecat
gatecatforce-pushed the add-verilog-example branch from e64bf92 to 90cb442CompareJuly 14, 2025 10:13
Comment on lines +50 to +63
base = os.path.dirname(__file__)

verilog_sources = [
f"{base}/picosoc_asic_top.v",
f"{base}/picorv32/picosoc/spimemio.v",
f"{base}/picorv32/picosoc/simpleuart.v",
f"{base}/picorv32/picosoc/picosoc.v",
f"{base}/picorv32/picorv32.v",
]

for verilog_file in verilog_sources:
with open(verilog_file, 'r') as f:
platform.add_file(verilog_file, f)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just wondering, could we have a chipflow.toml section to include external code, or maybe use a seperate toml file for defining the import?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any progress on this?

Comment on lines +65 to +93
# Clock and reset
i_clk=ClockSignal(),
i_resetn=~ResetSignal(),

# UART
o_ser_tx=self.uart_0.tx.o,
i_ser_rx=self.uart_0.rx.i,

# SPI flash
o_flash_csb=self.flash.csn.o,
o_flash_clk=self.flash.clk.o,

o_flash_io0_oe=self.flash.d.oe[0],
o_flash_io1_oe=self.flash.d.oe[1],
o_flash_io2_oe=self.flash.d.oe[2],
o_flash_io3_oe=self.flash.d.oe[3],

o_flash_io0_do=self.flash.d.o[0],
o_flash_io1_do=self.flash.d.o[1],
o_flash_io2_do=self.flash.d.o[2],
o_flash_io3_do=self.flash.d.o[3],

i_flash_io0_di=self.flash.d.i[0],
i_flash_io1_di=self.flash.d.i[1],
i_flash_io2_di=self.flash.d.i[2],
i_flash_io3_di=self.flash.d.i[3],

# LEDs
o_leds=self.gpio_0.gpio.o

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, might be something worth putting in a toml description?

@gatecat
gatecatforce-pushed the add-verilog-example branch 4 times, most recently from 6b8a786 to 1e3fed9CompareSeptember 16, 2025 07:12
@gatecat

Copy link
Copy Markdown
ContributorAuthor

@robtaylor as "proper" Verilog support has turned into a bigger project, shall we at least get this merged in its current form (I've rebased and updated it, I don't think any of the other PRs should affect it) so we have some kind of Verilog example to point to?

@robtaylor

Copy link
Copy Markdown
Contributor

@robtaylor as "proper" Verilog support has turned into a bigger project, shall we at least get this merged in its current form (I've rebased and updated it, I don't think any of the other PRs should affect it) so we have some kind of Verilog example to point to?

Yes @gatecat , sounds sensible to me. Can you rebase now software-rework has landed?

@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from 9a82105 to 8086479CompareSeptember 29, 2025 12:45
@gatecat

Copy link
Copy Markdown
ContributorAuthor

Rebasing ended up a bit more complex than expected, but with ChipFlow/chipflow-lib#143, I think this should now be working

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

don't think this should be necessary now?

if the chipflow-lib impl doesnt do something you need, lets fix that

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be a ton of work to get software building working with Verilog, and I don't think everyone is even going to want this

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fair enough, see other comment..

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the flashio/cmd_read_*/set_flash parts here be in the QSPIFlash driver?
Maybe fix up chipflow-lib if drivers need a way to put stuff in start.S?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The picosoc qspi flash core isn't compatible with the one in chipflow-digital-ip so different drivers is needed

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah, i see. this is fine for now then i guess, as you're overriding software build. We should have a bit of a session on making sure we can have design specific drivers work alongside imported drivers.

}

void print_dec(uint32_t v)
{

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not something like:
do // run at least once to print 0
{
d = x % 10;
stack[sp++] = d + '0'; // push
x /= 10;
} while (x);

?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know, this was just taken from claire's picosoc code as-is

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how odd... Maybe note its origin in a comment?

Comment on lines +50 to +63
base = os.path.dirname(__file__)

verilog_sources = [
f"{base}/picosoc_asic_top.v",
f"{base}/picorv32/picosoc/spimemio.v",
f"{base}/picorv32/picosoc/simpleuart.v",
f"{base}/picorv32/picosoc/picosoc.v",
f"{base}/picorv32/picorv32.v",
]

for verilog_file in verilog_sources:
with open(verilog_file, 'r') as f:
platform.add_file(verilog_file, f)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any progress on this?

@robtaylor

Copy link
Copy Markdown
Contributor

Also seems this is using the long-deprecated PinSignature?? Please check you're working against a current chipflow-lib

@gatecat

Copy link
Copy Markdown
ContributorAuthor

Hm, where is that, I thought I moved to using all the predefined signatures in chipflow-lib so sim auto-generation works, but maybe some old code got left in by mistake...

@gatecat

Copy link
Copy Markdown
ContributorAuthor

I also don't touch pyproject.toml or pdm.lock in this PR so CI (where the tests pass, only the known issue of minimal timing out in the cloud builder causes a failure) should be using latest chipflow-lib already

@robtaylor

Copy link
Copy Markdown
Contributor

Maybe my local branch got messed up somehow, let me check it!

Signed-off-by: gatecat <gatecat@ds0.me>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@gatecat@robtaylor
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Adding a Verilog example using PicoSoC - #39

Open
gatecat wants to merge 1 commit into
mainfrom
add-verilog-example
Open

Adding a Verilog example using PicoSoC#39
gatecat wants to merge 1 commit into
mainfrom
add-verilog-example

Conversation

@gatecat

@gatecatgatecat commented May 14, 2025

Copy link
Copy Markdown
Contributor

Everything else is ready for review, although I have a couple of questions:

  • should this be in this repo at all, or a different one?
  • should the top level wrapper still use amaranth-orchard pin signatures, as it does now, or is it clearer if it defines the pin signatures in the wrapper too (e.g. as an example for people who want to wrap Verilog with other types of IO)

@gatecat
gatecat requested a review from robtaylorMay 14, 2025 07:16
@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from b426930 to f9a4d9cCompareMay 14, 2025 08:42
@robtaylor

Copy link
Copy Markdown
Contributor

I think it belongs here. Defining the iopins here is better as well.

Let's not add a makefile - it was removed from the others.
Trying to keep things as windows compatible as we can, though still need to test.

@gatecat

Copy link
Copy Markdown
ContributorAuthor

Let's not add a makefile - it was removed from the others.

Seems like it wasn't? e.g. https://github.com/ChipFlow/chipflow-examples/blob/main/mcu_soc/Makefile

@gatecat
gatecatforce-pushed the add-verilog-example branch from f9a4d9c to 7d0876eCompareMay 14, 2025 14:44
@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from 91ced06 to 8e2c516CompareJune 23, 2025 07:55
@robtaylor
robtaylorforce-pushed the add-verilog-example branch 2 times, most recently from 91ced06 to 210cfbdCompareJune 23, 2025 07:58
@gatecat
gatecatforce-pushed the add-verilog-example branch from 210cfbd to e7dde63CompareJuly 14, 2025 08:16
@gatecat
gatecat marked this pull request as ready for review July 14, 2025 08:16
@gatecat
gatecatforce-pushed the add-verilog-example branch from e7dde63 to e64bf92CompareJuly 14, 2025 08:17
@gatecat

Copy link
Copy Markdown
ContributorAuthor

Hopefully once ChipFlow/chipflow-lib#129 is in this is ready to go!

@gatecat
gatecatforce-pushed the add-verilog-example branch from e64bf92 to 90cb442CompareJuly 14, 2025 10:13
Comment on lines +50 to +63
base = os.path.dirname(__file__)

verilog_sources = [
f"{base}/picosoc_asic_top.v",
f"{base}/picorv32/picosoc/spimemio.v",
f"{base}/picorv32/picosoc/simpleuart.v",
f"{base}/picorv32/picosoc/picosoc.v",
f"{base}/picorv32/picorv32.v",
]

for verilog_file in verilog_sources:
with open(verilog_file, 'r') as f:
platform.add_file(verilog_file, f)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just wondering, could we have a chipflow.toml section to include external code, or maybe use a seperate toml file for defining the import?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any progress on this?

Comment on lines +65 to +93
# Clock and reset
i_clk=ClockSignal(),
i_resetn=~ResetSignal(),

# UART
o_ser_tx=self.uart_0.tx.o,
i_ser_rx=self.uart_0.rx.i,

# SPI flash
o_flash_csb=self.flash.csn.o,
o_flash_clk=self.flash.clk.o,

o_flash_io0_oe=self.flash.d.oe[0],
o_flash_io1_oe=self.flash.d.oe[1],
o_flash_io2_oe=self.flash.d.oe[2],
o_flash_io3_oe=self.flash.d.oe[3],

o_flash_io0_do=self.flash.d.o[0],
o_flash_io1_do=self.flash.d.o[1],
o_flash_io2_do=self.flash.d.o[2],
o_flash_io3_do=self.flash.d.o[3],

i_flash_io0_di=self.flash.d.i[0],
i_flash_io1_di=self.flash.d.i[1],
i_flash_io2_di=self.flash.d.i[2],
i_flash_io3_di=self.flash.d.i[3],

# LEDs
o_leds=self.gpio_0.gpio.o

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, might be something worth putting in a toml description?

@gatecat
gatecatforce-pushed the add-verilog-example branch 4 times, most recently from 6b8a786 to 1e3fed9CompareSeptember 16, 2025 07:12
@gatecat

Copy link
Copy Markdown
ContributorAuthor

@robtaylor as "proper" Verilog support has turned into a bigger project, shall we at least get this merged in its current form (I've rebased and updated it, I don't think any of the other PRs should affect it) so we have some kind of Verilog example to point to?

@robtaylor

Copy link
Copy Markdown
Contributor

@robtaylor as "proper" Verilog support has turned into a bigger project, shall we at least get this merged in its current form (I've rebased and updated it, I don't think any of the other PRs should affect it) so we have some kind of Verilog example to point to?

Yes @gatecat , sounds sensible to me. Can you rebase now software-rework has landed?

@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from 9a82105 to 8086479CompareSeptember 29, 2025 12:45
@gatecat

Copy link
Copy Markdown
ContributorAuthor

Rebasing ended up a bit more complex than expected, but with ChipFlow/chipflow-lib#143, I think this should now be working

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

don't think this should be necessary now?

if the chipflow-lib impl doesnt do something you need, lets fix that

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be a ton of work to get software building working with Verilog, and I don't think everyone is even going to want this

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fair enough, see other comment..

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the flashio/cmd_read_*/set_flash parts here be in the QSPIFlash driver?
Maybe fix up chipflow-lib if drivers need a way to put stuff in start.S?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The picosoc qspi flash core isn't compatible with the one in chipflow-digital-ip so different drivers is needed

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah, i see. this is fine for now then i guess, as you're overriding software build. We should have a bit of a session on making sure we can have design specific drivers work alongside imported drivers.

}

void print_dec(uint32_t v)
{

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not something like:
do // run at least once to print 0
{
d = x % 10;
stack[sp++] = d + '0'; // push
x /= 10;
} while (x);

?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know, this was just taken from claire's picosoc code as-is

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how odd... Maybe note its origin in a comment?

Comment on lines +50 to +63
base = os.path.dirname(__file__)

verilog_sources = [
f"{base}/picosoc_asic_top.v",
f"{base}/picorv32/picosoc/spimemio.v",
f"{base}/picorv32/picosoc/simpleuart.v",
f"{base}/picorv32/picosoc/picosoc.v",
f"{base}/picorv32/picorv32.v",
]

for verilog_file in verilog_sources:
with open(verilog_file, 'r') as f:
platform.add_file(verilog_file, f)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any progress on this?

@robtaylor

Copy link
Copy Markdown
Contributor

Also seems this is using the long-deprecated PinSignature?? Please check you're working against a current chipflow-lib

@gatecat

Copy link
Copy Markdown
ContributorAuthor

Hm, where is that, I thought I moved to using all the predefined signatures in chipflow-lib so sim auto-generation works, but maybe some old code got left in by mistake...

@gatecat

Copy link
Copy Markdown
ContributorAuthor

I also don't touch pyproject.toml or pdm.lock in this PR so CI (where the tests pass, only the known issue of minimal timing out in the cloud builder causes a failure) should be using latest chipflow-lib already

@robtaylor

Copy link
Copy Markdown
Contributor

Maybe my local branch got messed up somehow, let me check it!

Signed-off-by: gatecat <gatecat@ds0.me>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@gatecat@robtaylor
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Adding a Verilog example using PicoSoC - #39

Open
gatecat wants to merge 1 commit into
mainfrom
add-verilog-example
Open

Adding a Verilog example using PicoSoC#39
gatecat wants to merge 1 commit into
mainfrom
add-verilog-example

Conversation

@gatecat

@gatecatgatecat commented May 14, 2025

Copy link
Copy Markdown
Contributor

Everything else is ready for review, although I have a couple of questions:

  • should this be in this repo at all, or a different one?
  • should the top level wrapper still use amaranth-orchard pin signatures, as it does now, or is it clearer if it defines the pin signatures in the wrapper too (e.g. as an example for people who want to wrap Verilog with other types of IO)

@gatecat
gatecat requested a review from robtaylorMay 14, 2025 07:16
@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from b426930 to f9a4d9cCompareMay 14, 2025 08:42
@robtaylor

Copy link
Copy Markdown
Contributor

I think it belongs here. Defining the iopins here is better as well.

Let's not add a makefile - it was removed from the others.
Trying to keep things as windows compatible as we can, though still need to test.

@gatecat

Copy link
Copy Markdown
ContributorAuthor

Let's not add a makefile - it was removed from the others.

Seems like it wasn't? e.g. https://github.com/ChipFlow/chipflow-examples/blob/main/mcu_soc/Makefile

@gatecat
gatecatforce-pushed the add-verilog-example branch from f9a4d9c to 7d0876eCompareMay 14, 2025 14:44
@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from 91ced06 to 8e2c516CompareJune 23, 2025 07:55
@robtaylor
robtaylorforce-pushed the add-verilog-example branch 2 times, most recently from 91ced06 to 210cfbdCompareJune 23, 2025 07:58
@gatecat
gatecatforce-pushed the add-verilog-example branch from 210cfbd to e7dde63CompareJuly 14, 2025 08:16
@gatecat
gatecat marked this pull request as ready for review July 14, 2025 08:16
@gatecat
gatecatforce-pushed the add-verilog-example branch from e7dde63 to e64bf92CompareJuly 14, 2025 08:17
@gatecat

Copy link
Copy Markdown
ContributorAuthor

Hopefully once ChipFlow/chipflow-lib#129 is in this is ready to go!

@gatecat
gatecatforce-pushed the add-verilog-example branch from e64bf92 to 90cb442CompareJuly 14, 2025 10:13
Comment on lines +50 to +63
base = os.path.dirname(__file__)

verilog_sources = [
f"{base}/picosoc_asic_top.v",
f"{base}/picorv32/picosoc/spimemio.v",
f"{base}/picorv32/picosoc/simpleuart.v",
f"{base}/picorv32/picosoc/picosoc.v",
f"{base}/picorv32/picorv32.v",
]

for verilog_file in verilog_sources:
with open(verilog_file, 'r') as f:
platform.add_file(verilog_file, f)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just wondering, could we have a chipflow.toml section to include external code, or maybe use a seperate toml file for defining the import?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any progress on this?

Comment on lines +65 to +93
# Clock and reset
i_clk=ClockSignal(),
i_resetn=~ResetSignal(),

# UART
o_ser_tx=self.uart_0.tx.o,
i_ser_rx=self.uart_0.rx.i,

# SPI flash
o_flash_csb=self.flash.csn.o,
o_flash_clk=self.flash.clk.o,

o_flash_io0_oe=self.flash.d.oe[0],
o_flash_io1_oe=self.flash.d.oe[1],
o_flash_io2_oe=self.flash.d.oe[2],
o_flash_io3_oe=self.flash.d.oe[3],

o_flash_io0_do=self.flash.d.o[0],
o_flash_io1_do=self.flash.d.o[1],
o_flash_io2_do=self.flash.d.o[2],
o_flash_io3_do=self.flash.d.o[3],

i_flash_io0_di=self.flash.d.i[0],
i_flash_io1_di=self.flash.d.i[1],
i_flash_io2_di=self.flash.d.i[2],
i_flash_io3_di=self.flash.d.i[3],

# LEDs
o_leds=self.gpio_0.gpio.o

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, might be something worth putting in a toml description?

@gatecat
gatecatforce-pushed the add-verilog-example branch 4 times, most recently from 6b8a786 to 1e3fed9CompareSeptember 16, 2025 07:12
@gatecat

Copy link
Copy Markdown
ContributorAuthor

@robtaylor as "proper" Verilog support has turned into a bigger project, shall we at least get this merged in its current form (I've rebased and updated it, I don't think any of the other PRs should affect it) so we have some kind of Verilog example to point to?

@robtaylor

Copy link
Copy Markdown
Contributor

@robtaylor as "proper" Verilog support has turned into a bigger project, shall we at least get this merged in its current form (I've rebased and updated it, I don't think any of the other PRs should affect it) so we have some kind of Verilog example to point to?

Yes @gatecat , sounds sensible to me. Can you rebase now software-rework has landed?

@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from 9a82105 to 8086479CompareSeptember 29, 2025 12:45
@gatecat

Copy link
Copy Markdown
ContributorAuthor

Rebasing ended up a bit more complex than expected, but with ChipFlow/chipflow-lib#143, I think this should now be working

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

don't think this should be necessary now?

if the chipflow-lib impl doesnt do something you need, lets fix that

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be a ton of work to get software building working with Verilog, and I don't think everyone is even going to want this

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fair enough, see other comment..

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the flashio/cmd_read_*/set_flash parts here be in the QSPIFlash driver?
Maybe fix up chipflow-lib if drivers need a way to put stuff in start.S?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The picosoc qspi flash core isn't compatible with the one in chipflow-digital-ip so different drivers is needed

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah, i see. this is fine for now then i guess, as you're overriding software build. We should have a bit of a session on making sure we can have design specific drivers work alongside imported drivers.

}

void print_dec(uint32_t v)
{

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not something like:
do // run at least once to print 0
{
d = x % 10;
stack[sp++] = d + '0'; // push
x /= 10;
} while (x);

?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know, this was just taken from claire's picosoc code as-is

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how odd... Maybe note its origin in a comment?

Comment on lines +50 to +63
base = os.path.dirname(__file__)

verilog_sources = [
f"{base}/picosoc_asic_top.v",
f"{base}/picorv32/picosoc/spimemio.v",
f"{base}/picorv32/picosoc/simpleuart.v",
f"{base}/picorv32/picosoc/picosoc.v",
f"{base}/picorv32/picorv32.v",
]

for verilog_file in verilog_sources:
with open(verilog_file, 'r') as f:
platform.add_file(verilog_file, f)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any progress on this?

@robtaylor

Copy link
Copy Markdown
Contributor

Also seems this is using the long-deprecated PinSignature?? Please check you're working against a current chipflow-lib

@gatecat

Copy link
Copy Markdown
ContributorAuthor

Hm, where is that, I thought I moved to using all the predefined signatures in chipflow-lib so sim auto-generation works, but maybe some old code got left in by mistake...

@gatecat

Copy link
Copy Markdown
ContributorAuthor

I also don't touch pyproject.toml or pdm.lock in this PR so CI (where the tests pass, only the known issue of minimal timing out in the cloud builder causes a failure) should be using latest chipflow-lib already

@robtaylor

Copy link
Copy Markdown
Contributor

Maybe my local branch got messed up somehow, let me check it!

Signed-off-by: gatecat <gatecat@ds0.me>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

Adding a Verilog example using PicoSoC - #39

Open
gatecat wants to merge 1 commit into
mainfrom
add-verilog-example
Open

Adding a Verilog example using PicoSoC#39
gatecat wants to merge 1 commit into
mainfrom
add-verilog-example

Conversation

@gatecat

@gatecatgatecat commented May 14, 2025

Copy link
Copy Markdown
Contributor

Everything else is ready for review, although I have a couple of questions:

  • should this be in this repo at all, or a different one?
  • should the top level wrapper still use amaranth-orchard pin signatures, as it does now, or is it clearer if it defines the pin signatures in the wrapper too (e.g. as an example for people who want to wrap Verilog with other types of IO)

@gatecat
gatecat requested a review from robtaylorMay 14, 2025 07:16
@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from b426930 to f9a4d9cCompareMay 14, 2025 08:42
@robtaylor

Copy link
Copy Markdown
Contributor

I think it belongs here. Defining the iopins here is better as well.

Let's not add a makefile - it was removed from the others.
Trying to keep things as windows compatible as we can, though still need to test.

@gatecat

Copy link
Copy Markdown
ContributorAuthor

Let's not add a makefile - it was removed from the others.

Seems like it wasn't? e.g. https://github.com/ChipFlow/chipflow-examples/blob/main/mcu_soc/Makefile

@gatecat
gatecatforce-pushed the add-verilog-example branch from f9a4d9c to 7d0876eCompareMay 14, 2025 14:44
@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from 91ced06 to 8e2c516CompareJune 23, 2025 07:55
@robtaylor
robtaylorforce-pushed the add-verilog-example branch 2 times, most recently from 91ced06 to 210cfbdCompareJune 23, 2025 07:58
@gatecat
gatecatforce-pushed the add-verilog-example branch from 210cfbd to e7dde63CompareJuly 14, 2025 08:16
@gatecat
gatecat marked this pull request as ready for review July 14, 2025 08:16
@gatecat
gatecatforce-pushed the add-verilog-example branch from e7dde63 to e64bf92CompareJuly 14, 2025 08:17
@gatecat

Copy link
Copy Markdown
ContributorAuthor

Hopefully once ChipFlow/chipflow-lib#129 is in this is ready to go!

@gatecat
gatecatforce-pushed the add-verilog-example branch from e64bf92 to 90cb442CompareJuly 14, 2025 10:13
Comment on lines +50 to +63
base = os.path.dirname(__file__)

verilog_sources = [
f"{base}/picosoc_asic_top.v",
f"{base}/picorv32/picosoc/spimemio.v",
f"{base}/picorv32/picosoc/simpleuart.v",
f"{base}/picorv32/picosoc/picosoc.v",
f"{base}/picorv32/picorv32.v",
]

for verilog_file in verilog_sources:
with open(verilog_file, 'r') as f:
platform.add_file(verilog_file, f)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just wondering, could we have a chipflow.toml section to include external code, or maybe use a seperate toml file for defining the import?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any progress on this?

Comment on lines +65 to +93
# Clock and reset
i_clk=ClockSignal(),
i_resetn=~ResetSignal(),

# UART
o_ser_tx=self.uart_0.tx.o,
i_ser_rx=self.uart_0.rx.i,

# SPI flash
o_flash_csb=self.flash.csn.o,
o_flash_clk=self.flash.clk.o,

o_flash_io0_oe=self.flash.d.oe[0],
o_flash_io1_oe=self.flash.d.oe[1],
o_flash_io2_oe=self.flash.d.oe[2],
o_flash_io3_oe=self.flash.d.oe[3],

o_flash_io0_do=self.flash.d.o[0],
o_flash_io1_do=self.flash.d.o[1],
o_flash_io2_do=self.flash.d.o[2],
o_flash_io3_do=self.flash.d.o[3],

i_flash_io0_di=self.flash.d.i[0],
i_flash_io1_di=self.flash.d.i[1],
i_flash_io2_di=self.flash.d.i[2],
i_flash_io3_di=self.flash.d.i[3],

# LEDs
o_leds=self.gpio_0.gpio.o

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, might be something worth putting in a toml description?

@gatecat
gatecatforce-pushed the add-verilog-example branch 4 times, most recently from 6b8a786 to 1e3fed9CompareSeptember 16, 2025 07:12
@gatecat

Copy link
Copy Markdown
ContributorAuthor

@robtaylor as "proper" Verilog support has turned into a bigger project, shall we at least get this merged in its current form (I've rebased and updated it, I don't think any of the other PRs should affect it) so we have some kind of Verilog example to point to?

@robtaylor

Copy link
Copy Markdown
Contributor

@robtaylor as "proper" Verilog support has turned into a bigger project, shall we at least get this merged in its current form (I've rebased and updated it, I don't think any of the other PRs should affect it) so we have some kind of Verilog example to point to?

Yes @gatecat , sounds sensible to me. Can you rebase now software-rework has landed?

@gatecat
gatecatforce-pushed the add-verilog-example branch 3 times, most recently from 9a82105 to 8086479CompareSeptember 29, 2025 12:45
@gatecat

Copy link
Copy Markdown
ContributorAuthor

Rebasing ended up a bit more complex than expected, but with ChipFlow/chipflow-lib#143, I think this should now be working

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

don't think this should be necessary now?

if the chipflow-lib impl doesnt do something you need, lets fix that

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be a ton of work to get software building working with Verilog, and I don't think everyone is even going to want this

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fair enough, see other comment..

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the flashio/cmd_read_*/set_flash parts here be in the QSPIFlash driver?
Maybe fix up chipflow-lib if drivers need a way to put stuff in start.S?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The picosoc qspi flash core isn't compatible with the one in chipflow-digital-ip so different drivers is needed

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah, i see. this is fine for now then i guess, as you're overriding software build. We should have a bit of a session on making sure we can have design specific drivers work alongside imported drivers.

}

void print_dec(uint32_t v)
{

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not something like:
do // run at least once to print 0
{
d = x % 10;
stack[sp++] = d + '0'; // push
x /= 10;
} while (x);

?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know, this was just taken from claire's picosoc code as-is

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how odd... Maybe note its origin in a comment?

Comment on lines +50 to +63
base = os.path.dirname(__file__)

verilog_sources = [
f"{base}/picosoc_asic_top.v",
f"{base}/picorv32/picosoc/spimemio.v",
f"{base}/picorv32/picosoc/simpleuart.v",
f"{base}/picorv32/picosoc/picosoc.v",
f"{base}/picorv32/picorv32.v",
]

for verilog_file in verilog_sources:
with open(verilog_file, 'r') as f:
platform.add_file(verilog_file, f)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any progress on this?

@robtaylor

Copy link
Copy Markdown
Contributor

Also seems this is using the long-deprecated PinSignature?? Please check you're working against a current chipflow-lib

@gatecat

Copy link
Copy Markdown
ContributorAuthor

Hm, where is that, I thought I moved to using all the predefined signatures in chipflow-lib so sim auto-generation works, but maybe some old code got left in by mistake...

@gatecat

Copy link
Copy Markdown
ContributorAuthor

I also don't touch pyproject.toml or pdm.lock in this PR so CI (where the tests pass, only the known issue of minimal timing out in the cloud builder causes a failure) should be using latest chipflow-lib already

@robtaylor

Copy link
Copy Markdown
Contributor

Maybe my local branch got messed up somehow, let me check it!

Signed-off-by: gatecat <gatecat@ds0.me>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@gatecat@robtaylor