"RISING": begin
always @(posedge CLK, posedge RST) begin
- //Main counter
if(KEEP) begin
end
else if(UP)
count <= count + 1'd1;
- else
+ if(count == 14'h3fff)
+ count <= COUNT_TO;
+ else begin
count <= count - 1'd1;
- //Wrapping
- if(count == 0 && !UP)
- count <= COUNT_TO;
- if(count == 14'h3fff && UP)
- count <= COUNT_TO;
+ if(count == 0)
+ count <= COUNT_TO;
+ end
//Resets
if(RST) begin
"FALLING": begin
always @(posedge CLK, negedge RST) begin
- //Main counter
if(KEEP) begin
end
else if(UP)
count <= count + 1'd1;
- else
+ if(count == 14'h3fff)
+ count <= COUNT_TO;
+ else begin
count <= count - 1'd1;
- //Wrapping
- if(count == 0 && !UP)
- count <= COUNT_TO;
- if(count == 14'h3fff && UP)
- count <= COUNT_TO;
+ if(count == 0)
+ count <= COUNT_TO;
+ end
//Resets
if(!RST) begin
else begin
- //Main counter
if(KEEP) begin
end
else if(UP)
count <= count + 1'd1;
- else
+ if(count == 14'h3fff)
+ count <= COUNT_TO;
+ else begin
count <= count - 1'd1;
- //Wrapping
- if(count == 0 && !UP)
- count <= COUNT_TO;
- if(count == 14'h3fff && UP)
- count <= COUNT_TO;
+ if(count == 0)
+ count <= COUNT_TO;
+ end
end
end
else if(UP)
count <= count + 1'd1;
- else
+ if(count == 8'hff)
+ count <= COUNT_TO;
+ else begin
count <= count - 1'd1;
- //Wrapping
- if(count == 0 && !UP)
- count <= COUNT_TO;
- if(count == 8'hff && UP)
- count <= COUNT_TO;
+ if(count == 0)
+ count <= COUNT_TO;
+ end
//Resets
if(RST) begin
end
else if(UP)
count <= count + 1'd1;
- else
+ if(count == 8'hff)
+ count <= COUNT_TO;
+ else begin
count <= count - 1'd1;
- //Wrapping
- if(count == 0 && !UP)
- count <= COUNT_TO;
- if(count == 8'hff && UP)
- count <= COUNT_TO;
+ if(count == 0)
+ count <= COUNT_TO;
+ end
//Resets
if(!RST) begin
else begin
- //Main counter
if(KEEP) begin
end
else if(UP)
count <= count + 1'd1;
- else
+ if(count == 8'hff)
+ count <= COUNT_TO;
+ else begin
count <= count - 1'd1;
- //Wrapping
- if(count == 0 && !UP)
- count <= COUNT_TO;
- if(count == 8'hff && UP)
- count <= COUNT_TO;
+ if(count == 0)
+ count <= COUNT_TO;
+ end
end
parameter PATTERN_DATA = 16'h0;
parameter PATTERN_LEN = 5'd16;
+ localparam COUNT_MAX = PATTERN_LEN - 1'h1;
+
reg[3:0] count = 0;
always @(posedge CLK) begin
- if(!nRST)
- OUT <= PATTERN_DATA[0];
+ if(!nRST) begin
+ count <= COUNT_MAX;
+ end
else begin
- count <= count + 1;
- OUT <= PATTERN_DATA[count];
-
- if( (count + 1) == PATTERN_LEN)
- count <= 0;
+ count <= count - 1'h1;
+ if(count == 0)
+ count <= COUNT_MAX;
end
end
+ always @(*)
+ OUT = PATTERN_DATA[count];
+
endmodule
module GP_SHREG(input nRST, input CLK, input IN, output OUTA, output OUTB);