Altera_Forum
Honored Contributor
18 years agoManaging multiple clock domains in verilog
Hopefully a pretty basic question with a simple solution (ha ha ha)
I've got a project with two major sub blocks. The first block includes a NIOS II processor and lots of verilog glue logic to the external world. That's all in a single clock domain and works great. The second block is used to drive a variety of monitors so it has 3 different potential clocks none of which have any relationships with each other, nor do they have any relationship to the clock domain that has the NIOS processor in it. The only places that two worlds meet are: 1) a block of dual port RAM each side of which is clocked by it's respective clock signal 2) 2 control wires from the NIOS side to the display side to tell the display side which clock to use. I've put handshaking for the two control lines from NIOS to the display section. It runs OK but I'm getting a TON of timing warnings because it appears that the project is trying to get timing closure between all 4 clocks. I've gone into the Settings an have set Cut Paths Between Unrelated Clock Domains to ON but that doesn't seem to do anything. This isn't so much a "it's not working" as "how do I get rid of all these timing warnings?" Even within the "display" block of my project (which is in a separate .v file) it appears that it's trying to reach closure between all the different clock domains ... but that's not necessary as they never are active at the same time. I've got that piece set up as follows: wire ChosenClock; assign ChosenClock = (Clock1) ? OSC_53 : (Clock2) ? OSC_68 : OSC_95; always @ (posedge ChosenClock) begin <<lots of verilog code >> end where Clock1 and Clock2 are the signals coming from the NIOS side Thoughts / suggestions?