- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Should I just split the combinatorial logic at line 15 of the following verilog module or https://github.com/promach/internal_logic_analyzer/blob/master/rtl/check_data.v#l15 across several registers ?
https://alteraforum.com/forum/attachment.php?attachmentid=14127&stc=1`include "define.v"
module check_data (clk, data_out, data_in, test_failed); // verifying the memory (circular buffer) read and write processes
input clk;
input data_out; // memory output
input data_in; // memory input
output reg test_failed = 0;
wire data_out_is_valid;
always @(posedge clk)
begin
if(((data_out + `MEMORY_SIZE + `ALIGNMENT_DELAY) != (data_in + 1)) && data_out_is_valid) // due to "delay.v"
test_failed <= 1;
end
assign data_out_is_valid = (data_in >= `MEMORY_SIZE + `USER_HOLDOFF + `ALIGNMENT_DELAY) &&
(data_in < `MEMORY_SIZE + `MEMORY_SIZE + `USER_HOLDOFF + `ALIGNMENT_DELAY);
endmodule
Link Copied
2 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Your screen cap is too small to see, but you should certainly perform some of those calculations and comparisons outside of the always block in their own assign statements.
So you could say assign data_out_calc = data_out + `MEMORY_SIZE + `ALIGNMENT_DELAY; and do a check of just data_out_calc in the if statement. You could also do something similar for the righthand side of the if statement comparison check.- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
OK.
By the way, I found out what went wrong with my setup timing violation. It is due to my mistake in timing constraint xdc file. My system clock is 1Ghz
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page