Is there an open-source way to perform compress-bitstream?

Since the synthesis server appears to be down again (“synthesis already running” errors), I’ve been working on an alternative setup using Gitpod. You get a web-based editor (VSCode), server-side compilation (yosys, etc. installed and running on their service), and I should be able to port the USB flashing code to a VSCode extension.

The one sticking point is compress-bitstream. There’s no source or documentation, so it’s riskier to install. @ryanmjacobs, could you publish your sources or a spec? Alternately, can we flash without it?

Hi @sarahclark, sorry about the downtime. It should be resolved now.

I will follow up this weekend with source for compress-bitstream.

Gitpod looks interesting. I’ll definitely look into that. I’ve been wanting to move towards VSCode.

I think the best way to do it would be to introduce a VSCode extension and have everyone just install VSCode and use the extension to flash the device – I’ll probably start a repo soon for it.

Thank you @ryanmjacobs

For now, I’ve filed a pull request to make webfpga_icestorm_examples easier to use. TL;dr you won’t need to edit the makefile anymore, just drop the .v file in the src folder.

I can write a @MAP_IO parser into a PCF-building tool, but it would be lovely if you already have code.

I also notice that you have the compression code in Python (as part of the flash tool), so we can probably just create a wrapper in Python and there’s your compress-bitstream tool.

Thanks for the PR. I will take a look.

Let me dig up the parser. I forgot that we had the compression tool in Python as well.

1 Like

You’re welcome. My thought is to package the parser in a stand-alone tool for building PCF files.

One more question: I assumed that @MAP_IO was being processed on the server side, but it’s not showing up anywhere in the server source code.

I’m assuming that after processing @MAP_IO to a set of set_io directives in a PCF file, that you’re also somehow generating the top module with the call to the defined module (as @MAP_IO foo[0] 3 can’t yield @set_io foo[0] 12; I’m assuming you map the indexed entries to a synthetic variable name and then assemble the net out of that list in the generated top module.)

@ryanmjacobs since we’re headed into the weekend, can you take a look?