windowsでiverilog その91
概要
windowsでiverilogやってみた。
fizzbuzz書いてみた。
サンプルコード
module fizz(input clk, input rst, output reg [7:0] out);
reg [7:0] a;
reg [7:0] b;
reg [7:0] pc;
reg [7:0] mod;
always @(posedge clk)
begin
if (!rst)
begin
a <= 0;
b <= 0;
pc <= 10;
mod <= 0;
end
else
begin
case (pc)
10:
begin
a <= 0;
pc <= 20;
end
20:
begin
a <= a + 1;
pc <= 30;
end
30:
begin
b <= a / 15;
mod <= a % 15;
pc <= 40;
end
40:
begin
if (mod == 0)
begin
pc <= 120;
end
else
begin
pc <= 50;
end
end
50:
begin
b <= a / 5;
mod <= a % 5;
pc <= 60;
end
60:
begin
if (mod == 0)
begin
pc <= 140;
end
else
begin
pc <= 70;
end
end
70:
begin
b <= a / 3;
mod <= a % 3;
pc <= 80;
end
80:
begin
if (mod == 0)
begin
pc <= 160;
end
else
begin
pc <= 90;
end
end
90:
begin
out <= a / 100 + "0";
pc <= 91;
end
91:
begin
out <= a / 10 % 10 + "0";
pc <= 92;
end
92:
begin
out <= a % 10 + "0";
pc <= 100;
end
100:
begin
if (a < 100)
begin
pc <= 20;
end
else
begin
pc <= 110;
end
end
110:
begin
pc <= 110;
end
120:
begin
out <= "F";
pc <= 121;
end
121:
begin
out <= "I";
pc <= 122;
end
122:
begin
out <= "Z";
pc <= 123;
end
123:
begin
out <= "Z";
pc <= 124;
end
124:
begin
out <= "B";
pc <= 125;
end
125:
begin
out <= "U";
pc <= 126;
end
126:
begin
out <= "Z";
pc <= 127;
end
127:
begin
out <= "Z";
pc <= 130;
end
130:
begin
pc <= 100;
end
140:
begin
out <= "B";
pc <= 141;
end
141:
begin
out <= "U";
pc <= 142;
end
142:
begin
out <= "Z";
pc <= 143;
end
143:
begin
out <= "Z";
pc <= 150;
end
150:
begin
pc <= 100;
end
160:
begin
out <= "F";
pc <= 161;
end
161:
begin
out <= "I";
pc <= 162;
end
162:
begin
out <= "Z";
pc <= 163;
end
163:
begin
out <= "Z";
pc <= 170;
end
170:
begin
pc <= 100;
end
endcase
end
end
initial
begin
//$monitor("%d", pc);
end
endmodule
module test;
reg clk,
rst;
wire [7:0] out;
fizz u(.clk(clk), .rst(rst), .out(out));
initial
begin
clk = 0;
rst = 1;
$monitor("%s", out);
#2
rst = 0;
#2
rst = 1;
#2500
$finish;
end
always
#1
clk = ~clk;
endmodule
module fizz(input clk, input rst, output reg [7:0] out);
reg [7:0] a;
reg [7:0] b;
reg [7:0] pc;
reg [7:0] mod;
always @(posedge clk)
begin
if (!rst)
begin
a <= 0;
b <= 0;
pc <= 10;
mod <= 0;
end
else
begin
case (pc)
10:
begin
a <= 0;
pc <= 20;
end
20:
begin
a <= a + 1;
pc <= 30;
end
30:
begin
b <= a / 15;
mod <= a % 15;
pc <= 40;
end
40:
begin
if (mod == 0)
begin
pc <= 120;
end
else
begin
pc <= 50;
end
end
50:
begin
b <= a / 5;
mod <= a % 5;
pc <= 60;
end
60:
begin
if (mod == 0)
begin
pc <= 140;
end
else
begin
pc <= 70;
end
end
70:
begin
b <= a / 3;
mod <= a % 3;
pc <= 80;
end
80:
begin
if (mod == 0)
begin
pc <= 160;
end
else
begin
pc <= 90;
end
end
90:
begin
out <= a / 100 + "0";
pc <= 91;
end
91:
begin
out <= a / 10 % 10 + "0";
pc <= 92;
end
92:
begin
out <= a % 10 + "0";
pc <= 100;
end
100:
begin
if (a < 100)
begin
pc <= 20;
end
else
begin
pc <= 110;
end
end
110:
begin
pc <= 110;
end
120:
begin
out <= "F";
pc <= 121;
end
121:
begin
out <= "I";
pc <= 122;
end
122:
begin
out <= "Z";
pc <= 123;
end
123:
begin
out <= "Z";
pc <= 124;
end
124:
begin
out <= "B";
pc <= 125;
end
125:
begin
out <= "U";
pc <= 126;
end
126:
begin
out <= "Z";
pc <= 127;
end
127:
begin
out <= "Z";
pc <= 130;
end
130:
begin
pc <= 100;
end
140:
begin
out <= "B";
pc <= 141;
end
141:
begin
out <= "U";
pc <= 142;
end
142:
begin
out <= "Z";
pc <= 143;
end
143:
begin
out <= "Z";
pc <= 150;
end
150:
begin
pc <= 100;
end
160:
begin
out <= "F";
pc <= 161;
end
161:
begin
out <= "I";
pc <= 162;
end
162:
begin
out <= "Z";
pc <= 163;
end
163:
begin
out <= "Z";
pc <= 170;
end
170:
begin
pc <= 100;
end
endcase
end
end
initial
begin
//$monitor("%d", pc);
end
endmodule
module test;
reg clk,
rst;
wire [7:0] out;
fizz u(.clk(clk), .rst(rst), .out(out));
initial
begin
clk = 0;
rst = 1;
$monitor("%s", out);
#2
rst = 0;
#2
rst = 1;
#2500
$finish;
end
always
#1
clk = ~clk;
endmodule
以上。
Author And Source
この問題について(windowsでiverilog その91), 我々は、より多くの情報をここで見つけました https://qiita.com/ohisama@github/items/5c19b0b66813ad586616著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .