41 lines
960 B
Plaintext
41 lines
960 B
Plaintext
package ClkDivider;
|
|
export mkClkDivider;
|
|
|
|
export ClkDivider(..);
|
|
|
|
interface ClkDivider#(numeric type hi);
|
|
method Action reset();
|
|
method Bool isAdvancing();
|
|
method Bool isHalfCycle();
|
|
endinterface
|
|
|
|
module mkClkDivider#(Handle fileHandle)(ClkDivider#(hi));
|
|
Reg#(UInt#(TLog#(hi))) counter <- mkReg(0);
|
|
UInt#(TLog#(hi)) hi_value = fromInteger(valueOf(hi));
|
|
UInt#(TLog#(hi)) half_hi_value = fromInteger(valueOf(TDiv#(hi, 2)));
|
|
|
|
Real val = fromInteger(valueOf(hi));
|
|
let msg = "Clock Div Period : " + realToString(val) + "\n";
|
|
|
|
hPutStr(fileHandle, msg);
|
|
hPutStr(fileHandle, genModuleName);
|
|
|
|
rule tick;
|
|
$display(counter);
|
|
counter <= (counter == hi_value) ? 0 : counter + 1;
|
|
endrule
|
|
|
|
method Action reset();
|
|
counter <= 0;
|
|
endmethod
|
|
|
|
method Bool isAdvancing();
|
|
return (counter == hi_value);
|
|
endmethod
|
|
|
|
method Bool isHalfCycle();
|
|
return (counter == half_hi_value);
|
|
endmethod
|
|
endmodule
|
|
|
|
endpackage |