📄 outctrl.v
字号:
module OUTCTRL(COUNT, MODE, CLK, GATE, OUTENABLE, MODETRIG, LOAD, SETOUT_, CLROUT_, RELOAD, OUT); input CLK, GATE, LOAD, SETOUT_, CLROUT_, MODETRIG, OUTENABLE; input [ 3:1] MODE; input [15:0] COUNT; output OUT, RELOAD; reg OUT, TRIG, RETRIG, RELOAD, CLRTRIG; always @(negedge CLK) begin // Clear Counter Reload Flag RELOAD = 'b0; // Clear Trigger Flag CLRTRIG = 'b0; if ((GATE || (MODE[3:1] == 1) || (MODE[3:1] == 5)) && OUTENABLE) case (MODE[3:1]) 0 : if (!COUNT) begin // Set Out High On Terminal Count OUT = 'b1; end 1 : if (COUNT) begin if (TRIG & ~LOAD) OUT = 'b0; end else begin // Set Out High When Counter Hits 0 OUT = 'b1; // Do Not Retrigger CLRTRIG = 'b1; end 2 : if (COUNT == 16'b1) begin // Set Out Low When Counter Reaches 1 OUT = 'b0; // Reload New Count RELOAD = 'b1; end else begin // Set Out High When Counter Is Not 1 OUT = 'b1; end 3 : if (COUNT == 16'h2) begin // Toggle Out When Counter Reaches 2 OUT = ~OUT; // Reload New Count RELOAD = 'b1; end 4 , 5 : if (COUNT) begin // Set Out High When Counter Is Not 0 OUT = 'b1; end else if (TRIG) begin // Set Out Low When Counter Hits 0 And Was Triggered OUT = 'b0; CLRTRIG = 'b1; end endcase end // Set OUT High Immediately When GATE Goes Low In Modes 2 and 3 always @(negedge GATE) if ((MODE[3:1] == 2) || (MODE[3:1] == 3)) OUT = 'b1; // Retrigger When GATE Goes High In Modes 1, 2 and 5 always @(posedge GATE) if ((MODE[3:1] == 1) || (MODE[3:1] == 2) || (MODE[3:1] == 5)) RETRIG = 'b1; else RETRIG = 'b0; // Set or Clear OUT After A Mode Write always @(SETOUT_) if (!SETOUT_) assign OUT = 'b1; else deassign OUT; always @(CLROUT_) if (!CLROUT_) assign OUT = 'b0; else deassign OUT; // Counter Trigger Flag always @(RETRIG or MODETRIG) if (RETRIG || MODETRIG) TRIG = 'b1; always @(CLRTRIG) if (CLRTRIG) TRIG = 'b0; endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -