Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • Oct 05 23:44
    dependabot[bot] labeled #486
  • Oct 05 23:44
    dependabot[bot] labeled #486
  • Oct 05 23:44
    dependabot[bot] opened #486
  • Oct 05 23:44

    dependabot[bot] on npm_and_yarn

    Bump url-parse from 1.5.1 to 1.… (compare)

  • Sep 21 02:45
    dependabot[bot] labeled #485
  • Sep 21 02:45
    dependabot[bot] labeled #485
  • Sep 21 02:45
    dependabot[bot] opened #485
  • Sep 21 02:45

    dependabot[bot] on npm_and_yarn

    Bump tmpl from 1.0.4 to 1.0.5 i… (compare)

  • Aug 11 02:24
    dependabot[bot] labeled #484
  • Aug 11 02:24
    dependabot[bot] labeled #484
  • Aug 11 02:24
    dependabot[bot] opened #484
  • Aug 11 02:24

    dependabot[bot] on npm_and_yarn

    Bump path-parse from 1.0.6 to 1… (compare)

  • Aug 10 23:46
    dependabot[bot] labeled #483
  • Aug 10 23:46
    dependabot[bot] labeled #483
  • Aug 10 23:46
    dependabot[bot] opened #483
  • Aug 10 23:46

    dependabot[bot] on npm_and_yarn

    Bump path-parse from 1.0.6 to 1… (compare)

  • Jun 05 09:20
    dependabot[bot] labeled #482
  • Jun 05 09:20
    dependabot[bot] labeled #482
  • Jun 05 09:20
    dependabot[bot] opened #482
  • Jun 05 09:20

    dependabot[bot] on npm_and_yarn

    Bump ws from 6.2.1 to 6.2.2 in … (compare)

Taichi Ishitani
@taichi-ishitani
I often see std_logic_vector than unsinged.
Therefore, I ask this question.
GlenNicholls
@GlenNicholls

RgGen is 4th generation of my CSR automation tool and I started development of 1st generation about 10 years ago

No worries, I was just curious. I've seen a lot of tools like this and I'll be searching around for one eventually to automate some of my companies doc/develop process. However, likely we'll have to roll our own solution because our registers and register maps are not AXI and we have more complexity so the only thing we could leverage is doc generation I think.

both of std_logic_vector and unsigned types is defined as array of std_loigc.
unsigned data type has operators used with integer but std_logic_vector does not.

std_logic* is simply just a bit or bits of an enum U, X, 0, 1, Z, W, L, H, and - Reference. unsigned is defined in numeric_std. Anyways, using std_logic_vector and std_logic would be preferred for registers as it is the most intuitive. bits in unsigned are inherently related and I would not want a register generation tool to use that type unless I specifically told it to do so (e.g. for something like a cycle/bit counter, frequency, etc.)

1 reply
GlenNicholls
@GlenNicholls
Feel free to PM me or tag me in GitHub issues when you have questions about VHDL, I'm more than willing to code review or provide insight. Also https://gitter.im/vhdl/General is another good place to ask VHDL questions because I don't see as many VHDL users in here. Many people in that room maintain the VHDL standard and can answer questions when you experience difficulties with the type checking in VHDL as I know that it is a lot to digest at first
Taichi Ishitani
@taichi-ishitani

registers and register maps are not AXI

We also use non AXI bus protocol so we create our own plugin to support the bus protocol which we use.

we have more complexity

Do you need not only simple register/bit field types but also complex types?
If yes, what kind of types do you need?

GlenNicholls
@GlenNicholls

We also use non AXI bus protocol so we create our own plugin to support the bus protocol which we use.

interesting, I'll look into rggen more once I start experimenting with incorporating some of my ideas in our flow. It'd be a lifesaver if I didn't have to write something from scratch.

Do you need not only simple register/bit field types but also complex types?

Sort of, we also have an interesting interface to software. It's kind of hard to explain but works really nicely for coupling software and firmware. I'll PM you.

Taichi Ishitani
@taichi-ishitani

for something like a cycle/bit counter, frequency, etc

Signals defined as unsinged should show number and std_logic_vector is more general than unsigned.
Therefore, I should use std_logic_vector for register.
Is my understanding correct?

GlenNicholls
@GlenNicholls
Yes, you're understanding is correct. unsigned and signed are generally used specifically for manipulating numbers (like adding/subtracting). std_logic_vector are just bits (vector of std_logic) that may or may not have any relationship
Taichi Ishitani
@taichi-ishitani
Thank you!
Your help make my understanding more clearly.
GlenNicholls
@GlenNicholls
No problem! Again, feel free to tag me whenever you have any questions or want me to look at code.
Taichi Ishitani
@taichi-ishitani
Thank you!
Olof Kindgren
@olofk
Haha. I see you brought up my favorite pet peeve about VHDL. It's a fine language, especially since 2008 and onwards, but there are just so many VHDL users who likes to mention how good it is for type safety and then they still use std_logic instead of std_ulogic everywhere :)
TBF, std_logic was actually a different type from std_ulogic instead of a resolved subtype prior to vhdl2008 so you had to make explicit casts between them, but still
I think VHDL could be much more popular if VHDL users just stopped treating it as a very verbose verilog and actually started using the good stuff in the language
Taichi Ishitani
@taichi-ishitani
This is the first time to write VHDL.
Function overloading and type inference at calling function are interesting features. I want SystemVerilog to support these features!
Jeremy Bennett
@jeremybennett
Welcome @veronia-iskandar a PhD student at TU Dresden, who is working with me and Will Jones on a FOSSi Google Summer of Code project to advance the work done by Southampton Uni on adding AI support to the CV32E40P.
Zeeshan Rafique
@zeeshanrafique23
Sounds interesting, Welcome @veronia-iskandar
Stafford Horne
@stffrdhrn
@taichi-ishitani cool, project. I live in Japan too, its always to to see other local interest in open source hardware.
Dan Gisselquist
@ZipCPU
taichi-ishitani: Do you have any examples of register logic created by your tool? I'd love to take a look.
Stafford Horne
@stffrdhrn
@ZipCPU , meet @Harshitha172000 , I am mentoring her for Gsoc this year doing formal verification of the mor1x cpu. Thanks again for your comments on her latest blog entry https://harshitha172000.github.io/blog2.html
Taichi Ishitani
@taichi-ishitani
@stffrdhrn ,
Thank you!
I'm developing UVM based AXI VIP and NoC router written in SytemVerilog.
These are also open source.
@ZipCPU ,
You can find sample RTL and others from this repository.
https://github.com/rggen/rggen-sample
Dan Gisselquist
@ZipCPU
*examinse
*examines
Taichi Ishitani
@taichi-ishitani
These are repositories for common RLT modules. Generated RTL modules are constructed with these common modules.
Dan Gisselquist
@ZipCPU
taichi-ishitani: Have you considered this AXI requirement: https://github.com/ZipCPU/website/blob/master/img/tweets/axi-spec-registered.png ?
2 replies
It looks like your READY signals are built combinatorially off of the AXI VALID signals, which would violate this criteria.
Am I missing something?
Dan Gisselquist
@ZipCPU
Also, what happens if AWVALID shows up first? It looks like AWREADY will be set, after which AWVALID (may) be dropped. If WVALID then shows up, get_request_valid will never notice since both AWVALID and WVALID won't be true on the same cycle.
2 replies
Dan Gisselquist
@ZipCPU
Let me recommend this article on skid buffers to you--it's the easiest way to fix the combinatorial issue: https://zipcpu.com/blog/2019/05/22/skidbuffer.html
1) AXI4-lite doesn't have ID's. AXI5-lite does. 2) If AW shows up before W, then you don't want to process the write. In that case, you might grab the wrong ID.
Either way, cheers, and I'm glad I was able to help.
Dan Gisselquist
@ZipCPU
Ahh, okay -- but that's something you'll need to fix for the other reason. Still, that part at least makes more sense now.
Here's the logic I typically use in my register write logic: https://github.com/ZipCPU/wb2axip/blob/master/rtl/easyaxil.v#L151-L152
It works, but only if it follows a skid buffer.
I'm also known for keeping the read and write paths of the AXI interface separate. It's not hard to do with register handling, and often even saves you some logic.
2 replies
It's not required, tho, just ... something different I do
Taichi Ishitani
@taichi-ishitani
image.png
2 replies
Dan Gisselquist
@ZipCPU
Here's a blog article discussing that design, in case your are interested in how I handle register access: https://zipcpu.com/blog/2020/03/08/easyaxil.html
Doesn't look like I can see images from here.
Ahh ... found the link. Okay, I see it. Thanks!
Looking at it now.
What doesn't make sense is the other half of the sentence.
An AXI4 lite slave CANNOT be connected to a full AXI interface without modification. You'll always need to handle the AxLEN signals from AXI(full) when generating the slave signals, and then you'll need to work out RLAST and BVALID from the results.
1 reply
It's not trivial, but it is doable. (See, for example, https://github.com/ZipCPU/wb2axip/blob/master/rtl/axi2axilite.v )
Dan Gisselquist
@ZipCPU
The spec, IHI0022G is the version I have, discusses returning an error if you ever try to access an AXI4lite slave inappropriately. This isn't as easy as it sounds. For example, you cannot return an error if the error would come back out of order from something already going on internal to the slave.
At any rate, it's late here. I'll be back again on Monday.