vGoodtimes
Advanced Member level 4
- Joined
- Feb 16, 2015
- Messages
- 1,089
- Helped
- 307
- Reputation
- 614
- Reaction score
- 303
- Trophy points
- 83
- Activity points
- 8,730
procedure tagRamWr is ramWrTemplate(tagEn, tagWr, tagAddr, tagValue);
Personally, I don't recall a case where I need some concurrent output to be a function of the next state so what you're describing has never come up. Maybe your interfaces need some work to get rid of the situations you describe. The common command/wait or command/ack interface typically doesn't need the outputs to be a function of next state.How do you get around getting the driving signal out of a clocked FSM without a 2-process design or manually duplicating the logic?
I don't get how you would have "the only difference is the signal names" when accessing two different BRAMs in a design. I would expect that the two BRAMs would show up at different addresses within the same address space so the same signals would be used. Instead what would be different is the constant address of the individual BRAMs. But maybe you're describing something else.for my #2, I use procedures a lot. I also use vim for marker-based code folding, so large sections of routine code just disappear. My goal is to make the core part of the logic as short and meaningful as possible. To that end, I would prefer to have a ramWrite(addr, value) procedure, which sets en, wr, addr, and din to suitable values. But if I have two or more BRAMs, I need to have multiple duplicate procedures where the only difference is the signal names. I'd like to be able to say:
Code:procedure tagRamWr is ramWrTemplate(tagEn, tagWr, tagAddr, tagValue);
or something similar, not sure what syntax works best. That way I don't need to copy-paste the same declarations over and over again just to save a few lines in the core of the design. Really, having the ability to return procedures from functions in this manner makes this style of code possible.
This one doesn't make any sense. Any block that has a set of registers must have an address input. Assuming that to be of type std_logic_vector or unsigned then 2**addr_inp'length will give you the address space for that entity. If instead you use type natural as the address input, then should also also have defined an upper limit to that address (i.e. addr_inp: natural range 0 to XXX). Wherever it is that XXX gets defined (which would most likely be in a package that defines the registers and the bitfields), would get used as well in the higher level entity. There would not be any reason to pass up the number of addresses from the individual module to a higher level module.my #3, really, just the example I gave. I have a really nice address decoder that works with base/high addresses. But I still have to do the allocation of registers for my design manually. It would be nice to be able to have all modules send "I use x control addresses" and to have the controller pass back the actual addresses.
Personally, I don't recall a case where I need some concurrent output to be a function of the next state so what you're describing has never come up. Maybe your interfaces need some work to get rid of the situations you describe. The common command/wait or command/ack interface typically doesn't need the outputs to be a function of next state.How do you get around getting the driving signal out of a clocked FSM without a 2-process design or manually duplicating the logic?
Personally, I don't recall a case where I need some concurrent output to be a function of the next state so what you're describing has never come up. Maybe your interfaces need some work to get rid of the situations you describe. The common command/wait or command/ack interface typically doesn't need the outputs to be a function of next state.
two independent BRAMs will have different signals connected to the ports. The way to write to either independent BRAM is the same with the only difference being the names of the signals connected to the ports.I don't get how you would have "the only difference is the signal names" when accessing two different BRAMs in a design.
ah, sorry. I meant I had to do the assignment myself. My point was that if all modules passed the address space requirements up, it would be possible to assign addresses from a script. This feature was more of a toy idea. IIRC it would also be possible with a tcl script.This one doesn't make any sense. ... Wherever it is that XXX gets defined .... There would not be any reason to pass up the number of addresses from the individual module to a higher level module.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?