- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello,
I've spent a lot of time trying to get this state machine working with no hope.
Requirement: In this FSM, we want to set:
- opcode_reg and offset_reg to USB3_DATA(3 downto 0) and USB_DATA(15 downto 4) respectively in GET_OPCODE_OFFSET state (and keep its value after that)
- RegLengthCounter to unsigned(USB3_DATA(11 downto 0)), and RegPointer to unsigned(OffsetReg) in GET_LENGTH state. (and keep its value after that)
Here is the code I've written so far (attached), specifically processes:
USB_CLK_PROC and RegProxy_FSM_Proc
Problem:
- The data is registered correctly, but changes at the next clock edge, how can I keep it fixed?
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Follow the LHS (left hand side)!
Are you sure USB3_DATA isn't changing at all? You have it in a separate assignment (non-clocked logic), so it will update immediately if there is a change:
USB3_DATA <= USBSendDataOut when USBWrOeRSig = '1' else (others => 'Z');
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you, it was a timing issue, I was wrongly sampling the data at the same edge when it changes.
Changed sampling moment to be on the opposite clock edge.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page