Verilog code 단순화?
- 글쓴이
- 알고리듬
- 등록일
- 2018-05-11 02:28
- 조회
- 3,109회
- 추천
- 0건
- 댓글
- 3건
관련링크
module Billboard(
output reg [7:0] LAMP,
input wire enable,
input wire nrst,
input wire clk);
parameter [3:0] START = 4'd0,
S0 = 4'd1,
S1 = 4'd2,
S2 = 4'd3,
S3 = 4'd4,
S4 = 4'd5,
S5 = 4'd6,
S6 = 4'd7,
S7 = 4'd8,
S8 = 4'd9,
S9 = 4'd10;
reg [3:0] state;
reg [3:0] cnt;
always @(posedge clk or negedge nrst) begin
if(!nrst) begin
state <= START;
end
else begin
case(state)
START: begin
LAMP <= 8'b0;
cnt <= 4'b0;
if(enable) state <= S0;
else state <= START;
end
S0: begin
LAMP[0] <= 1'b1;
state <= S1;
end
S1: begin
LAMP[1] <= 1'b1;
state <= S2;
end
S2: begin
LAMP[2] <= 1'b1;
state <= S3;
end
S3: begin
LAMP[3] <= 1'b1;
state <= S4;
end
S4: begin
LAMP[4] <= 1'b1;
state <= S5;
end
S5: begin
LAMP[5] <= 1'b1;
state <= S6;
end
S6: begin
LAMP[6] <= 1'b1;
state <= S7;
end
S7: begin
LAMP[7] <= 1'b1;
state <= S8;
end
S8: begin
LAMP <= 8'b0;
if(cnt < 5) state <= S9;
else state <= START;
end
S9: begin
LAMP <= 8'b11111111;
cnt <= cnt + 4'd1;
state <= S8;
end
endcase
end
end
endmodule
광고판에 불을 들어오게하는 간단한 코드입니다.
이 코드를 간략하게 줄여서 작성이 가능하다는데
도저히 머리를 싸매도 간략하게 줄이는 방법을 모르겠습니다.
선배님들께 도움을 요청합니다ㅠㅠ
output reg [7:0] LAMP,
input wire enable,
input wire nrst,
input wire clk);
parameter [3:0] START = 4'd0,
S0 = 4'd1,
S1 = 4'd2,
S2 = 4'd3,
S3 = 4'd4,
S4 = 4'd5,
S5 = 4'd6,
S6 = 4'd7,
S7 = 4'd8,
S8 = 4'd9,
S9 = 4'd10;
reg [3:0] state;
reg [3:0] cnt;
always @(posedge clk or negedge nrst) begin
if(!nrst) begin
state <= START;
end
else begin
case(state)
START: begin
LAMP <= 8'b0;
cnt <= 4'b0;
if(enable) state <= S0;
else state <= START;
end
S0: begin
LAMP[0] <= 1'b1;
state <= S1;
end
S1: begin
LAMP[1] <= 1'b1;
state <= S2;
end
S2: begin
LAMP[2] <= 1'b1;
state <= S3;
end
S3: begin
LAMP[3] <= 1'b1;
state <= S4;
end
S4: begin
LAMP[4] <= 1'b1;
state <= S5;
end
S5: begin
LAMP[5] <= 1'b1;
state <= S6;
end
S6: begin
LAMP[6] <= 1'b1;
state <= S7;
end
S7: begin
LAMP[7] <= 1'b1;
state <= S8;
end
S8: begin
LAMP <= 8'b0;
if(cnt < 5) state <= S9;
else state <= START;
end
S9: begin
LAMP <= 8'b11111111;
cnt <= cnt + 4'd1;
state <= S8;
end
endcase
end
end
endmodule
광고판에 불을 들어오게하는 간단한 코드입니다.
이 코드를 간략하게 줄여서 작성이 가능하다는데
도저히 머리를 싸매도 간략하게 줄이는 방법을 모르겠습니다.
선배님들께 도움을 요청합니다ㅠㅠ
다른 사람들 의견
-
토루크막토
()
그 디지털회로 강의때 배운 카누맵이나 최적화 방법론 같은것들 기억나시죠? 이럴때 쓰라고 있는겁니다. 필요없는 state 들을 optimization하는게 최선인데 코드라인이 많이줄지는 않을것같네요.
-
알고리듬 ()
감사합니다!!
-
달빛연구자
()
얼른 봐서는 for문으로 단순화 할 수 있을 것 같은데요.