@@ -459,4 +459,60 @@ class ElaborationChecksSpec extends DesignSpec:
459459 assertElaborationErrors(Top ())(
460460 " No error found"
461461 )
462+ test(" no need for clock location constraint check in internal domains" ):
463+ object Test :
464+ import hw .constraints .*
465+ @ deviceID(deviceID.Vendor .XilinxAMD , " test" , " test" , " " )
466+ @ timing.clock(rate = 20 .MHz )
467+ @ top(false ) class Top extends RTDesign :
468+ @ io(loc = " locClk" )
469+ val clk = Clk <> IN
470+ @ io(loc = " locx" )
471+ val x = Bit <> IN
472+ @ io(loc = " locy" )
473+ val y = Bit <> OUT
474+ @ timing.clock(rate = 20 .MHz )
475+ val dmn = new RTDomain :
476+ val clk = Clk <> VAR
477+ dmn.clk <> clk
478+ y <> x.reg(1 , init = 0 )
479+ end Top
480+ end Test
481+ import Test .*
482+ assertElaborationErrors(Top ())(
483+ " No error found"
484+ )
485+ test(" domain constraint check" ):
486+ object Test :
487+ import hw .constraints .*
488+ @ deviceID(deviceID.Vendor .XilinxAMD , " test" , " test" , " " )
489+ @ top(false ) class Top extends EDDesign :
490+ @ io(loc = " locClk" )
491+ @ timing.clock(rate = 20 .MHz )
492+ val dmn1 = new RTDomain :
493+ @ io(loc = " locx" )
494+ val x = Bit <> IN
495+ @ io(loc = " locy" )
496+ val y = Bit <> OUT
497+ y <> x.reg(1 , init = 0 )
498+ end dmn1
499+ @ timing.clock(rate = 20 .MHz )
500+ val dmn2 = new RTDomain :
501+ val x = Bit <> IN
502+ val y = Bit <> OUT
503+ y <> x.reg(1 , init = 0 )
504+ end dmn2
505+ end Top
506+ end Test
507+ import Test .*
508+ assertElaborationErrors(Top ())(
509+ """ |Elaboration errors found!
510+ |The following top device design ports or domains are missing location constraints:
511+ | Top.dmn2 is missing a clock location constraint
512+ | Top.dmn2.x
513+ | Top.dmn2.y
514+ |To Fix:
515+ |Add a location constraint to the ports by connecting them to a located resource or
516+ |by using the `@io` constraint.""" .stripMargin
517+ )
462518end ElaborationChecksSpec
0 commit comments