clifford changed the topic of #yosys to: Yosys Open SYnthesis Suite: http://www.clifford.at/yosys/ -- Channel Logs: https://irclog.whitequark.org/yosys
<corecode> ok
<corecode> so now i need to modify yosys
<corecode> ah no, it's in icefuzz still
<corecode> nice
<daveshah> Eventually you'll want to add blackboxes for these new cell types to https://github.com/YosysHQ/yosys/blob/master/techlibs/ice40/cells_sim.v
<tpb> Title: yosys/cells_sim.v at master · YosysHQ/yosys · GitHub (at github.com)
<daveshah> But no urgency
seldridge has quit [Ping timeout: 244 seconds]
emeb has left #yosys [#yosys]
emeb_mac has joined #yosys
<corecode> meh, now i'm fighting with cmake
<corecode> aha!
<corecode> existing bug
<emeb_mac> corecode: how goes the LP4k work?
<corecode> in nextpnr now
<corecode> hm what's this pi_eb_bank that i can't find in glbinfo now?
seldridge has joined #yosys
<corecode> aha
<corecode> i need to make up padin bits
leviathanch has joined #yosys
gsi__ has joined #yosys
gsi_ has quit [Ping timeout: 250 seconds]
<corecode> okay
<corecode> daveshah: yea i don't know where i get the io_clktoq from
<corecode> or the model params
AlexDaniel has quit [Ping timeout: 268 seconds]
citypw has joined #yosys
rohitksingh_work has joined #yosys
pie__ has joined #yosys
<mrec> I'm doing some serial communication however the results differ from synthesis to synthesis and that's not only confusing but wrong
<mrec> I guess there's some bug in the synthesis tool itself otherwise the result wouldn't be random
<mrec> and I highly doubt that this has anything to do with setup/hold/propagation delays
<mrec> random in terms of .. it's stable for the image (even if I reload it) but if I do the synthesis again the result might be unexpected in another way
pie___ has quit [Ping timeout: 245 seconds]
<mrec> I'm transferring some frames, the first value of the frame should be static, one line is used for synchronisation how comes that the static value is different from time to time if it is there at all
<mrec> I never had such a basic issue with any other lattice part so I guess the ice40up5k is shit
<mrec> looking at the rtl ... it's even synthesising things which it should cut out ... no no this thing is so wrong
<mrec> it feels like when counting from 1 to 10 things break at 1
<mrec> what a damn shit part ... it's like if rising_edge(shitclock) then if iter=2 then output<='1' else output <='0' end if; end if; is not working
<mrec> iter++ of course
<mrec> whatever it's so basic that it is impossible to fail normally
proteusguy has joined #yosys
<emeb_mac> iin my experience when the synthesized design isn't doing what I expect it's usually down to me not having fully understood something.
<MoeIcenowy> mrec: try Lattice Radient or iCEcube2?
<MoeIcenowy> if it works with them, but not with Yosys/NextPnR/Icestorm
<MoeIcenowy> it's a severe bug
seldridge has quit [Quit: WeeChat 1.4]
proteusguy has quit [Ping timeout: 246 seconds]
emeb_mac has quit [Quit: Leaving.]
proteusguy has joined #yosys
m4ssi has joined #yosys
<daveshah> corecode: have you got timing html file?
proteusguy has quit [Remote host closed the connection]
rohitksingh_work has quit [Ping timeout: 250 seconds]
rohitksingh_work has joined #yosys
rohitksingh_work has quit [Ping timeout: 245 seconds]
citypw has quit [Ping timeout: 240 seconds]
<corecode> yes
indy has quit [Ping timeout: 250 seconds]
<corecode> daveshah: i only see propagation delays and timing checks
danieljabailey has quit [Ping timeout: 244 seconds]
<tnt> mrec: just pastebin the exact code you're trying to run ...
<daveshah> corecode: what you want is the propogation delay from posedge:clk to lcout
<daveshah> in LogicCell40
<corecode> ooh, i thought it is for SB_IO
<corecode> 1050, it says
<corecode> somehow i have all propagation delays twice
<corecode> odd
<daveshah> Can you post the file? From memory if icecube.sh isn't creating the project correctly then icecube can produce funny timings
<corecode> sure
<corecode> will the txt file suffice?
<tpb> Title: timings_u4k.txt · GitHub (at gist.github.com)
<tpb> Title: timings_up5k.txt · GitHub (at gist.github.com)
<corecode> to compare
<daveshah> I think this is a project problem, usually suspiciously round timings are a sign of this
<corecode> :)
<corecode> so what can i do?
<daveshah> Make sure these lines: https://github.com/cliffordwolf/icestorm/blob/master/icefuzz/icecube.sh#L442-L443 are creating a project file set up the same way as one from the icecube gui
<tpb> Title: icestorm/icecube.sh at master · cliffordwolf/icestorm · GitHub (at github.com)
<corecode> aaah
<daveshah> You'll also need to clear the timing file after making the fix
<corecode> do i need to run any other tests again after fixing this?
<daveshah> No, just the main icefuzz
<daveshah> It only affects timing, nothing bitstream wise
<corecode> do i have to clear the runs?
<corecode> the work_*
<daveshah> yes
<corecode> aha
<corecode> oka
<corecode> daveshah: i can't find the timings in nextpnr in the 5k file
<daveshah> corecode: wait, is this the IO timing?
<daveshah> then it should be PRE_IO, sorry
<corecode> there are two places with timing
<corecode> SB_IO, and the lut model
rohitksingh has joined #yosys
<daveshah> lut model?
<daveshah> you mean delay.cc?
voxadam has quit [Read error: Connection reset by peer]
voxadam has joined #yosys
m4ssi has quit [Ping timeout: 240 seconds]
m4ssi has joined #yosys
rohitksingh has quit [Remote host closed the connection]
rohitksingh has joined #yosys
emeb has joined #yosys
rohitksingh has quit [Ping timeout: 246 seconds]
danieljabailey has joined #yosys
<corecode> yes
citypw has joined #yosys
<corecode> okay
<corecode> now i need to test a simple design
* corecode goes on to learn how to use yosys and nextpnr
<corecode> daveshah: i'm getting
<corecode> ERROR: Unable to place cell 'hfosc_OSC' of type 'ICESTORM_HFOSC'
<corecode>
<corecode> but i can't find a place in nextpnr where i forgot to add it
<corecode> it's in the chipdb
<tnt> corecode: do you have your chipdb somewhere ?
<tpb> Title: iCE40 Ultra = iCE5LP = u4k port by corecode · Pull Request #202 · cliffordwolf/icestorm · GitHub (at github.com)
<corecode> better
<daveshah> corecode: fyi, we don't check in the chipdb-*.txt files
<corecode> oh
<corecode> that explains why git grep didn't find it
<daveshah> HFOSC in there looks fine
<tnt> yeah. You did rebuild nextpnr right ?
<daveshah> If you look at that tile under "Bels" in the GUI sidebar opened for u4k, do you see it?
<corecode> yes
<corecode> X0/Y21/hfosc_1, type ICESTORM_HFOSC
<daveshah> looks good
<corecode> there is no cell drawn tho
<corecode> in the ui
<daveshah> no, that's fine
<corecode> ok
<daveshah> can you try setting z to zero?
<corecode> "yea, but..."
<corecode> what about the 5k
<corecode> hm
<corecode> the error comes from cell_place_unique
<daveshah> I think the importer needs z to be contiguous from zero in a tile
<corecode> and either it's not in ctx->getBels, or its type isn't right, or it is locked
<corecode> aha
<corecode> aaaah
<corecode> feels more like we should change the importer...
<tnt> the importer ? you mean chipdb.py ?
<corecode> well, whatever you call the importer
<corecode> i guess the problem is that i don't have the i2c cell in icepack yet
<daveshah> although I can't see why they would be a problem either
<daveshah> ultraplus seems to have some non-contiguous zs already in fact
<daveshah> never mind that idea
<tnt> if it shows in the gui, it should be in the blob right ?
<daveshah> yup
<corecode> yea, it's not in getBels()
<corecode> LFOSC isn't there either
<corecode> or SMCCLK
<corecode> only warmboot is
<corecode> feels like the wrong chip type
<corecode> i guess the json file doesn't contain the target
<corecode> and i need to pass it in the command line
<corecode> derp
<daveshah> Yeah
<tnt> lol
<corecode> well, there is the nice .proj file
<corecode> i thought it would be picked up
<corecode> but evidently not?
<daveshah> No, the JSON is device independent
<daveshah> It is mapped to a family (ie iCE40) rather than specific device
<daveshah> A proj file should contain the device type though
<MoeIcenowy> json by yosys?
<daveshah> Yeah
<MoeIcenowy> BTW is the standard of the json output by yosys available?
<MoeIcenowy> or is it used by any other EDA tool?
<MoeIcenowy> (except Yosys/NextPnR
<tpb> Title: Yosys Open SYnthesis Suite :: Command Reference :: write_json (at www.clifford.at)
<MoeIcenowy> BTW the EDIF output of Yosys is not usable in iCEcube2 (
<daveshah> I know
<daveshah> EDIF isn't really a standard
<MoeIcenowy> and the VQM output of Yosys is not usable in Quartus Prime
<daveshah> Yosys outputs the Xilinx flavour, more or less
<MoeIcenowy> (seems mainly about altsyncram
<daveshah> I don't think that should be too hard to fix
<MoeIcenowy> but it seems strange
<tnt> https://github.com/YosysHQ/nextpnr/issues/206 is a serious limitation of that json fmt for the moment :/
<tpb> Title: Port defined like d[9:2] is not indexed correctly when used in pcf file · Issue #206 · YosysHQ/nextpnr · GitHub (at github.com)
<corecode> so what is this .proj file for?
<MoeIcenowy> daveshah: is commercial synthesis tool all customized for a certain PnR toolchain?
<daveshah> corecode: the .proj file is mostly for projects created in the GUI
<MoeIcenowy> e.g. Synplify Pro
<daveshah> MoeIcenowy: I think Lattice have some custom shims for compatability
<daveshah> tnt: I keep pestering clifford to fix the Yosys side :P
<corecode> i guess you'd have to output vector position as a second array
<daveshah> I think we will still only ever consider contiguous vectos
<daveshah> *vectors
<daveshah> so probably just a start and end index
<corecode> is there ways to have non-contiguous vectors?
<daveshah> Not in any HDL I know
<corecode> okay
<daveshah> I don't even think Yosys supports them internally
<MoeIcenowy> why don't you define two vectos
<MoeIcenowy> vectors *
<corecode> okay
<corecode> i wonder, can i put a normal IO on an OD pad?
<daveshah> Yes, but it works as an open drain IO
<corecode> that's good enough
<daveshah> no pullup either
<corecode> i made a design error
<corecode> had to flip my LEDs around :)
<daveshah> :)
<corecode> ofc i didn't read the docs thoroughly enough
<daveshah> didn't realise they were sinks?
<corecode> yea
<corecode> i thought they were sources
<daveshah> advantage of sinks is that your LED supply can be 5V
<corecode> so these pads can tolerate 5V?
<corecode> or are you safe due to Vf
<corecode> hm, why does nextpnr use a SB_GB for the HFOSC
<corecode> terminate called after throwing an instance of 'std::out_of_range'
<corecode> what(): vector::_M_range_check: __n (which is 21) >= this->size() (which is 18)
<corecode> oO
<corecode> int8_t &cbit = config.at(swi.y).at(swi.x).at(swi.cbits[i].row).at(swi.cbits[i].col);
<corecode>
<corecode> that line
<tnt> daveshah: you can only use 5V if the min Vf is large enough AFAIK.
<daveshah> corecode: nextpnr always uses a SB_GB for global signals
<daveshah> you can tell it not to for testing with "(* ROUTE_THROUGH_FABRIC=1 *)
<daveshah> on the HFOSC
<tnt> your chipdb for HFOSC has a port named 'CLKLF_FABRIC 0 18 slf_op_7' that seems suspicious.
<corecode> doesn't the HFOSC directly go to the global network?
<daveshah> well, through a padin
<daveshah> the SB_GB is used to enable that, and also prevent anything else using that global buffer site
<tnt> corecode: SB_GB kind of represents the 'global network'.
<corecode> in the HFOSC tile
<corecode> okay
<corecode> so SB_GB can be used for both fabric signals and for signals that can be connected directly to the glb
<daveshah> in nextpnr, this is how we represent this
<MoeIcenowy> daveshah: I dug into the issue, and found that when dealing with VQM, the width of some intput/output of altsyncram depends on its parameters
<MoeIcenowy> however yosys seems to have no support of this
<MoeIcenowy> (Quartus uses its proprietary format to define altsyncram
<daveshah> Yosys supports this for normal cells
<daveshah> I don't know how it works for blackbox cells
<MoeIcenowy> how to use it?
<MoeIcenowy> oh sorry I found me wrong
<MoeIcenowy> the uppercase and lowercase naming of the parameters are the same within Quartus when parsing VQM
<MoeIcenowy> but is different on Yosys
<corecode> so why are there only 18 cbits, and it is trying to access bit 21
<MoeIcenowy> I just wrongly used lowercase in parameter def and lowercase in portdef
<corecode> hm, it's trying to set a config bit in ipconn cell 0/19
m4ssi has quit [Remote host closed the connection]
<tpb> Title: iCE40 Ultra = iCE5LP = u4k port by corecode · Pull Request #202 · cliffordwolf/icestorm · GitHub (at github.com)
<daveshah> this doesn't look right
<daveshah> Ultra doesn't have IO tiles at the side
<corecode> duh!
* corecode makes up a song about rebuilding chipdbs
<daveshah> :D
<daveshah> we should add music like those old keygens
<ZipCPU> daveshah: Who's building that HugeFPGA?
<daveshah> :D
<ZipCPU> Is that just the tinyFPGA EX renamed?
<daveshah> yes, it was a bad combination of inspect element and gimp :P
<ZipCPU> So ... there's really nothing there then? Got it.
<MoeIcenowy> I got manually defined altsyncram work now
<MoeIcenowy> but inferred ones still not work
<daveshah> I don't think Intel RAM inference really works yet
<daveshah> ZipCPU might know more?
<ZipCPU> What device are we discussing? Altera?
<MoeIcenowy> ZipCPU: yes
<ZipCPU> I've been building a design with inferred RAM within it ... is that not working for you? Which device?
<MoeIcenowy> ZipCPU: do you use Yosys to synth and Quartus to PnR?
<ZipCPU> I have used Yosys to synth, but I'll admit my path stopped there
<ZipCPU> My design needs DDR I/O elements, as well as the PLL, and I'm not (yet) certain how to properly synthesize those for Quartus PnR
<MoeIcenowy> The inferred thing seems well, but it just doesn't work ;-)
<ZipCPU> How so?
<tnt> corecode: inside the FGPA the actual SB_GB circuit is probably not used, but 'virtually' instanciating a locked SB_GB for cores that drive the global network is how it's done in next pnr. This made it easier to support and also 'lock-out' that particular SB_GB from being used (since it would drive the same global network ...).
<MoeIcenowy> Quartus has strict check on altsyncram parameters and ports
proteusguy has joined #yosys
<MoeIcenowy> and VQM is not Verilog -- it has a more narrow grammar
<corecode> hm, unable to find config bit IpConfig.CBIT_3
<corecode> CLKHF_DIV_0
<corecode> IpConfig.CBIT_3 B2[7]
<corecode>
<corecode> it's in the chipdb tho\
<corecode> hm no, i think this is a different CBIT_3
<corecode> no, it's the hfosc, pretty sure
<daveshah> corecode: are you sure that location is an ipcon tile?
<daveshah> and that is going into the database correct
<daveshah> *correctly
<corecode> it's a dsp tile
<corecode> but bitstream.cc replaces the name with IpConfig.
<daveshah> Is it a dsp3 tile?
<daveshah> Looks like only CBIT_0 is present in the config bit database for that
<MoeIcenowy> oops nowadays quartus itself doesn't generate VQM file
<MoeIcenowy> only other 3rdparty synthesis tool will generate
<corecode> huh
<corecode> why
<MoeIcenowy> I think some weird FPGA vendor has no their own synthesis tool
<daveshah> Because the fuzzer didn't build any designs to create them
<corecode> hmm
<MoeIcenowy> and uses VQM from Quartus
<daveshah> As the CBITs are always in the same place across all the DSP/IpCon tiles
<corecode> but why
<daveshah> you can just use something like this to add it:
<tpb> Title: icestorm/icebox.py at master · cliffordwolf/icestorm · GitHub (at github.com)
<daveshah> corecode: did you have the oscillator covering all divider values in make_uip.py?
<corecode> ha, no
<MoeIcenowy> daveshah: BTW how difficult is it to reuse prjtrellis workflow on other Lattice chips?
<MoeIcenowy> e.g. ECP3
pointfree has quit [Excess Flood]
<corecode> but i set both bits
<MoeIcenowy> some low end ECP3 chips are quite cheap
<daveshah> MoeIcenowy: workflow should mostly be the same
<daveshah> MoeIcenowy: some changes to nextpnr might be needed because of slightly different slice, etc
<daveshah> also, different fuzzers for that
pointfree has joined #yosys
<corecode> wait
<daveshah> corecode: anyway, just adding them manually in icebox.py like that snippet above is fine
<corecode> nono, i do
<daveshah> could it be that the fuzz data wasn't being processed correctly
<corecode> definitely got fuzzed
<daveshah> did it end up in iceboxdb.py?
<corecode> no
<corecode> aha, i'm using the 5k db
<corecode> for the dsp
<corecode> i'm confused now - how would this work on 5k?
<daveshah> The 5k doesn't use those configuration bits
<daveshah> it has the osc bits in an ipcon tile
<daveshah> but it's fine to share the databases
<corecode> oh!
<corecode> that location is an ipcon tile
<corecode> so you suggest rather than modifying the chipdb file, just hardcode it?
<daveshah> 0 16 looks like a dsp3 tile to me
<corecode> yes it is
<daveshah> yeah, the same way I did for dsp1 CBIT_5
<corecode> you mean also on the 5k?
<tpb> Title: icestorm/icebox.py at master · cliffordwolf/icestorm · GitHub (at github.com)
<daveshah> just get the locations of the cbits from the other tiles
<daveshah> yeah, doing it for both 5k and u4k is fine
<daveshah> fwiw maybe those bits have some hidden function on the 5k too :P
<corecode> oh, just for something else?
<daveshah> well, who knows...
<corecode> because it seems the bit location is the same, just that there is a different tile at that point?
<daveshah> yeah
<corecode> <chipdb song>
danieljabailey has quit [Ping timeout: 246 seconds]
xdeller__ has quit [Read error: Connection reset by peer]
xdeller__ has joined #yosys
seldridge has joined #yosys
seldridge has quit [Client Quit]
seldridge has joined #yosys
seldridge has quit [Client Quit]
<corecode> meh, now i need to figure out whether there is a TRIM_EN bit
<corecode> or i remove it from the u4k for now
<corecode> hm, i need an ieren info block for the OD pins
<corecode> somehow my chipdb doesn't have that
leviathanch has quit [Remote host closed the connection]
xerpi has joined #yosys
xerpi has quit [Remote host closed the connection]
xerpi has joined #yosys
<corecode> hm, how can i get icecube to use a SB_IO_OD for output
<daveshah> tweak the pin_type and make sure that D_OUT_0 is connected
<corecode> oh use a SB_IO explicitly?
<corecode> hm
<daveshah> well a SB_IO_OD
<corecode> i'm looking at the ioctrl script, and i don't see how you got the ieren from that
<corecode> because the script is skipping the OD pins
<daveshah> I think I just assumed the same pattern (mirrored Z) and it worked
<corecode> haha
<daveshah> might have checked with explain manually
<tpb> Title: icestorm/sb_io_od.v at master · cliffordwolf/icestorm · GitHub (at github.com)
<corecode> i wonder why they did that
<daveshah> The ierens are strange
<daveshah> at least they are consistently swapped on the ultra/up
<daveshah> on the hx8k they are sometimes swapped and sometimes aren't
<daveshah> on the hx1k they are all nice and correct
<corecode> hm
<corecode> Got .ipcon_tile statement for dsp0 tile 0 5.
<corecode> man my chipdb sucks
<corecode> why doesn't it call it dsp_tile
<corecode> but it has a dsp bel on there
xerpi has quit [Ping timeout: 255 seconds]
xerpi has joined #yosys
* corecode fixes icebox
xerpi has quit [Remote host closed the connection]
xerpi has joined #yosys
<corecode> aha
xerpi_ has joined #yosys
xerpi has quit [Ping timeout: 255 seconds]
<corecode> \o/ blinky simulates
<daveshah> :)
noname_Matt has joined #yosys
voxadam_ has joined #yosys
voxadam has quit [Ping timeout: 258 seconds]
<corecode> finally
xerpi_ has quit [Remote host closed the connection]
<tpb> Title: ice40: support u4k by corecode · Pull Request #241 · YosysHQ/nextpnr · GitHub (at github.com)
<daveshah> Awesome
<daveshah> I'll take a look
<corecode> thank you
noname_Matt has quit [Ping timeout: 256 seconds]
<tnt> What's SMCCLK btw ?
noname_Matt has joined #yosys
<daveshah> tnt: my limited understanding is SMCCLK exposes the internal configuration clock
<daveshah> I don't exactly know how it behaves after startup
<daveshah> But on the iCE40 Ultra iCEcube uses it to clock a register (with D input at 1'b1) driving output enables
<noname_Matt> Has anyone tried writing a partial bitstream to an ice40 device without restarting it? (a warm boot perhaps?)
<noname_Matt> I'm interested to know if it would be possible to lay things out such that the devices attached to a buss in an SoC could be swapped during operation
<daveshah> As far as I know, any reconfiguration will lose CRAM and register values
<daveshah> I don't even know a way to keep the config port open while the design is running
<daveshah> OTOH, preserving BRAM across reconfig is supported
<corecode> wow hot hardware update
<corecode> and reload state from bram
<noname_Matt> corecode: Can you elaborate a bit? I did see some info on enabling/disabling warm/cold rebooting, but nothing on what a 'hot' update would entail
<corecode> i'm just extrapolating from the information
<noname_Matt> I'm guessing this would reconfigure the device and clear all registers, but you're suggesting to recover from bram?
<daveshah> So BRAM will be kept if the bitstream doesn't initialise it
<corecode> dump all state into a bram via some shift register or mux, then in the new design reverse direction
<noname_Matt> I see.
<daveshah> atm the tools always include bram init in the bitstream, but that would be easy enough to change
<corecode> i don't think an fpga is really made for that
<corecode> i mean, can you load the DFF optionally from a different signal?
<noname_Matt> Still requires explicit start/stop, but saves having to do a full reboot of the core.
<noname_Matt> well, I think the FPGA is definitely not made for this, but then again it definitely wan't made to work with icestorm
<noname_Matt> daveshah: what might be fun is to configure a simple logic circuit that responds to outside signaling, and measure at what point you lose CRAM/register contents
<noname_Matt> and see if it can be skipped over, maybe
<daveshah> I have attempted to readout CRAM after asserting CDONE and not got anything useful
<noname_Matt> like, maybe it's only wiped if you're writing to the same block? I'm not aware of any trials and I'd be interested to know if anyone tried this during initial reverse engineering
<noname_Matt> cdone?
<daveshah> Sorry, I mean creset
<daveshah> It seems to wipe CRAM
<noname_Matt> All I have to go on so far is http://www.clifford.at/icestorm/format.html
<tpb> Title: Project IceStorm Bitstream File Format Documentation (at www.clifford.at)
<noname_Matt> so I don't know what you're talking about :(
<daveshah> creset is a pin
<corecode> config pins
<daveshah> You assert it to reset the device, and you have to assert it to re enable the SPI programming interface
<daveshah> As soon as you assert it, CRAM is wiped
<noname_Matt> is there somewhere I can read about the programming procedure?
<corecode> and i guess clocks stop running
<corecode> yes, there is an app note
<noname_Matt> when does the SPI interface become disabled?
<corecode> i think CDONE goes high at some point
<corecode> and that's it
<noname_Matt> I ask because I guess the next logical question is if it's possible to get into an inbetween state where running and programming are both possible.
<noname_Matt> is the app note on lattice's site somewhere?
<corecode> i'd home not
<corecode> yea
<corecode> hope*
<daveshah> SPI is disabled once you send opcode 0 payload 6 to wakeup and start running the bitstream
<daveshah> It's possible there's a different command to run the design without disabling SPI
<corecode> ah so far i've just pushed out the bin
<daveshah> It's also unlikely given the structure of the device
<daveshah> Yeah, effectively the bin is a series of commands
<noname_Matt> might be fun to fuzz it and look for undocumented commands, but it sounds like you might be correct
<noname_Matt> what dos warm boot in opcode 9 refer to?
<noname_Matt> does*
<daveshah> It enables use of the SB_WARMBOOT primitive
<corecode> but warmboot is spi master
<daveshah> Yeah
<daveshah> Exactly the same commands are read off SPI flash in that mode
<daveshah> Just the iCE40 is driving the clock and sends a read command first
<noname_Matt> cool
<noname_Matt> and I assume it will read the same opcodes and look for the same sort of termination?
<corecode> so, do i try to upload a blinky design to my board
m4ssi has joined #yosys
<daveshah> noname_Matt: the termination is the wakeup command again
<corecode> well, opcode 0/6
<noname_Matt> what if you send it a reboot instead? how does SB_WARMBOOT fit into it?
<noname_Matt> reboot: 0/8
<daveshah> Reboot just resets things
<daveshah> WARMBOOT basically indexes into a jump table that points to the image, iirc
<noname_Matt> reboot just starts everything over again?
<daveshah> Yeah
<noname_Matt> so warmboot allows you to select a starting point to read opcode from one of several locations, but requires the same resetting? is it related to is 4/*?
<daveshah> Yes, warmboot also performs a reset of all but BRAM
<daveshah> Yes, warmboot will index into a jump table of 4 opcodes that point to the real images
<noname_Matt> that is, opcode 4/* not literally a table four entries long?
<noname_Matt> I presume such a table is located at a certain spot and is indexed on some condition?
<daveshah> I think each "warmboot applet" is 32 bytes in total
<daveshah> With a 4 command to set the jump address and a reboot command which jumps to that address
<daveshah> The warmboot primitive selects one of those applets
<noname_Matt> hrm.
<noname_Matt> when you say warmboot primitive, is this a series of opcodes, or a hardwired procedure?
<noname_Matt> controlled by opcode 9/*?
<corecode> SB_WARMBOOT
<noname_Matt> A signal on the chip?
<corecode> yes
<noname_Matt> and this starts the procedure to select and load a bitstream?
<corecode> i think you apply signals that select the bitstream
<noname_Matt> ok. that makes sense
<noname_Matt> thank you. I have a much better idea how all this work now.
<noname_Matt> works*
tpb has quit [Remote host closed the connection]
tpb has joined #yosys