7セグメントLEDの機能を追加してみました。8桁LEDで2進数カウント、左の桁の7セグメントLEDの16進数でのカウント、右の桁はトグルスイッチ下位4bit入力で16進数で出力。一番右のPUSH_SWでカウントのアップダウンを切り替えます。いまいちvelirog自体を理解してないのですが、一応動いているみたいです。だんだんコードが長くなってきので、次は階層化でしょうか。simの使い方も全くわからないのですぐに壁にぶつかりそう。
//velirogソース
module test(LED,SW,PUSH_SW,CLOCK,RESET,NANASEG_1,NANASEG_2);
input CLOCK;
input RESET;
input [7:0]SW;
input [3:0]PUSH_SW;
output [7:0]LED;
output [7:0]NANASEG_1;
output [7:0]NANASEG_2;
reg [7:0]NANASEG_1;
reg [7:0]NANASEG_2;
reg [23:0]count_timer;
reg [7:0]work1;
reg [3:0]work2;
wire [3:0]work3;
always @(posedge CLOCK)
count_timer<=count_timer+1;
always @(posedge CLOCK or negedge RESET)
begin
if (RESET==0)
begin
work1=0;
work2=0;
end
else
if(count_timer==0)
begin
if(PUSH_SW[0]==1)
begin
work1=work1+1;
work2=work2+1;
end
else
begin
work1=work1-1;
work2=work2-1;
end
end
end
assign LED=~work1;
assign work3=~SW;
always @(work2)
begin
case(work2)
4'b0000:NANASEG_1 <= 8'b10001000;//0
4'b0001:NANASEG_1 <= 8'b11101011;//1
4'b0010:NANASEG_1 <= 8'b01001100;//2
4'b0011:NANASEG_1 <= 8'b01001001;//3
4'b0100:NANASEG_1 <= 8'b00101011;//4
4'b0101:NANASEG_1 <= 8'b00011001;//5
4'b0110:NANASEG_1 <= 8'b00011000;//6
4'b0111:NANASEG_1 <= 8'b10001011;//7
4'b1000:NANASEG_1 <= 8'b00001000;//8
4'b1001:NANASEG_1 <= 8'b00001011;//9
4'b1010:NANASEG_1 <= 8'b00001010;//A
4'b1011:NANASEG_1 <= 8'b00111000;//b
4'b1100:NANASEG_1 <= 8'b10011100;//C
4'b1101:NANASEG_1 <= 8'b01101000;//d
4'b1110:NANASEG_1 <= 8'b00011100;//E
4'b1111:NANASEG_1 <= 8'b00011110;//F
default:NANASEG_1 <= 8'b11110111;//.
endcase
end
always @(work3)
begin
case(work3)
4'b0000:NANASEG_2 <= 8'b10001000;//0
4'b0001:NANASEG_2 <= 8'b11101011;//1
4'b0010:NANASEG_2 <= 8'b01001100;//2
4'b0011:NANASEG_2 <= 8'b01001001;//3
4'b0100:NANASEG_2 <= 8'b00101011;//4
4'b0101:NANASEG_2 <= 8'b00011001;//5
4'b0110:NANASEG_2 <= 8'b00011000;//6
4'b0111:NANASEG_2 <= 8'b10001011;//7
4'b1000:NANASEG_2 <= 8'b00001000;//8
4'b1001:NANASEG_2 <= 8'b00001011;//9
4'b1010:NANASEG_2 <= 8'b00001010;//A
4'b1011:NANASEG_2 <= 8'b00111000;//b
4'b1100:NANASEG_2 <= 8'b10011100;//C
4'b1101:NANASEG_2 <= 8'b01101000;//d
4'b1110:NANASEG_2 <= 8'b00011100;//E
4'b1111:NANASEG_2 <= 8'b00011110;//F
default:NANASEG_2 <= 8'b11110111;//.
endcase
end
endmodule
//ピンの割り当て
NET "PUSH_SW[0]" IOSTANDARD = LVCMOS33;
NET "PUSH_SW[1]" IOSTANDARD = LVCMOS33;
NET "PUSH_SW[2]" IOSTANDARD = LVCMOS33;
NET "PUSH_SW[3]" IOSTANDARD = LVCMOS33;
NET "LED[0]" IOSTANDARD = LVCMOS33;
NET "LED[1]" IOSTANDARD = LVCMOS33;
NET "LED[2]" IOSTANDARD = LVCMOS33;
NET "LED[3]" IOSTANDARD = LVCMOS33;
NET "LED[4]" IOSTANDARD = LVCMOS33;
NET "LED[5]" IOSTANDARD = LVCMOS33;
NET "LED[6]" IOSTANDARD = LVCMOS33;
NET "LED[7]" IOSTANDARD = LVCMOS33;
NET "PUSH_SW[0]" DRIVE = 2;
NET "PUSH_SW[1]" DRIVE = 2;
NET "PUSH_SW[2]" DRIVE = 2;
NET "PUSH_SW[3]" DRIVE = 2;
NET "LED[0]" DRIVE = 2;
NET "LED[1]" DRIVE = 2;
NET "LED[2]" DRIVE = 2;
NET "LED[3]" DRIVE = 2;
NET "LED[4]" DRIVE = 2;
NET "LED[5]" DRIVE = 2;
NET "LED[6]" DRIVE = 2;
NET "LED[7]" DRIVE = 2;
NET "LED[0]" SLEW = SLOW;
NET "LED[1]" SLEW = SLOW;
NET "LED[2]" SLEW = SLOW;
NET "LED[3]" SLEW = SLOW;
NET "LED[4]" SLEW = SLOW;
NET "LED[5]" SLEW = SLOW;
NET "LED[6]" SLEW = SLOW;
NET "LED[7]" SLEW = SLOW;
NET "PUSH_SW[0]" PULLUP;
NET "PUSH_SW[1]" PULLUP;
NET "PUSH_SW[2]" PULLUP;
NET "PUSH_SW[3]" PULLUP;
NET "LED[0]" LOC = P24;
NET "LED[1]" LOC = P22;
NET "LED[2]" LOC = P17;
NET "LED[3]" LOC = P15;
NET "LED[4]" LOC = P12;
NET "LED[5]" LOC = P10;
NET "LED[6]" LOC = P5;
NET "LED[7]" LOC = P3;
NET "PUSH_SW[0]" LOC = P62;
NET "PUSH_SW[1]" LOC = P60;
NET "PUSH_SW[2]" LOC = P57;
NET "PUSH_SW[3]" LOC = P53;
NET "SW[0]" LOC = P54;
NET "SW[1]" LOC = P58;
NET "SW[2]" LOC = P61;
NET "SW[3]" LOC = P63;
NET "SW[4]" LOC = P34;
NET "SW[5]" LOC = P36;
NET "SW[6]" LOC = P41;
NET "SW[7]" LOC = P48;
NET "SW[0]" IOSTANDARD = LVCMOS33;
NET "SW[1]" IOSTANDARD = LVCMOS33;
NET "SW[2]" IOSTANDARD = LVCMOS33;
NET "SW[3]" IOSTANDARD = LVCMOS33;
NET "SW[4]" IOSTANDARD = LVCMOS33;
NET "SW[5]" IOSTANDARD = LVCMOS33;
NET "SW[6]" IOSTANDARD = LVCMOS33;
NET "SW[7]" IOSTANDARD = LVCMOS33;
NET "SW[0]" DRIVE = 2;
NET "SW[1]" DRIVE = 2;
NET "SW[2]" DRIVE = 2;
NET "SW[3]" DRIVE = 2;
NET "SW[4]" DRIVE = 2;
NET "SW[5]" DRIVE = 2;
NET "SW[6]" DRIVE = 2;
NET "SW[7]" DRIVE = 2;
NET "SW[0]" PULLUP;
NET "SW[1]" PULLUP;
NET "SW[2]" PULLUP;
NET "SW[3]" PULLUP;
NET "SW[4]" PULLUP;
NET "SW[5]" PULLUP;
NET "SW[6]" PULLUP;
NET "SW[7]" PULLUP;
NET "CLOCK" LOC = P88;
NET "RESET" LOC = P89;
NET "CLOCK" IOSTANDARD = LVCMOS33;
NET "RESET" IOSTANDARD = LVCMOS33;
NET "CLOCK" DRIVE = 2;
NET "RESET" DRIVE = 2;
NET "CLOCK" PULLUP;
NET "RESET" PULLUP;
NET "NANASEG_1[0]" IOSTANDARD = LVCMOS33;
NET "NANASEG_1[1]" IOSTANDARD = LVCMOS33;
NET "NANASEG_1[2]" IOSTANDARD = LVCMOS33;
NET "NANASEG_1[3]" IOSTANDARD = LVCMOS33;
NET "NANASEG_1[4]" IOSTANDARD = LVCMOS33;
NET "NANASEG_1[5]" IOSTANDARD = LVCMOS33;
NET "NANASEG_1[6]" IOSTANDARD = LVCMOS33;
NET "NANASEG_1[7]" IOSTANDARD = LVCMOS33;
NET "NANASEG_2[0]" IOSTANDARD = LVCMOS33;
NET "NANASEG_2[1]" IOSTANDARD = LVCMOS33;
NET "NANASEG_2[2]" IOSTANDARD = LVCMOS33;
NET "NANASEG_2[3]" IOSTANDARD = LVCMOS33;
NET "NANASEG_2[4]" IOSTANDARD = LVCMOS33;
NET "NANASEG_2[5]" IOSTANDARD = LVCMOS33;
NET "NANASEG_2[6]" IOSTANDARD = LVCMOS33;
NET "NANASEG_2[7]" IOSTANDARD = LVCMOS33;
NET "NANASEG_1[0]" DRIVE = 2;
NET "NANASEG_1[1]" DRIVE = 2;
NET "NANASEG_1[2]" DRIVE = 2;
NET "NANASEG_1[3]" DRIVE = 2;
NET "NANASEG_1[4]" DRIVE = 2;
NET "NANASEG_1[5]" DRIVE = 2;
NET "NANASEG_1[6]" DRIVE = 2;
NET "NANASEG_1[7]" DRIVE = 2;
NET "NANASEG_2[0]" DRIVE = 2;
NET "NANASEG_2[1]" DRIVE = 2;
NET "NANASEG_2[2]" DRIVE = 2;
NET "NANASEG_2[3]" DRIVE = 2;
NET "NANASEG_2[4]" DRIVE = 2;
NET "NANASEG_2[5]" DRIVE = 2;
NET "NANASEG_2[6]" DRIVE = 2;
NET "NANASEG_2[7]" DRIVE = 2;
NET "NANASEG_1[0]" LOC = P83;
NET "NANASEG_1[1]" LOC = P94;
NET "NANASEG_1[2]" LOC = P91;
NET "NANASEG_1[3]" LOC = P86;
NET "NANASEG_1[4]" LOC = P66;
NET "NANASEG_1[5]" LOC = P68;
NET "NANASEG_1[6]" LOC = P78;
NET "NANASEG_1[7]" LOC = P84;
NET "NANASEG_2[0]" LOC = P95;
NET "NANASEG_2[1]" LOC = P92;
NET "NANASEG_2[2]" LOC = P90;
NET "NANASEG_2[3]" LOC = P85;
NET "NANASEG_2[4]" LOC = P79;
NET "NANASEG_2[5]" LOC = P71;
NET "NANASEG_2[6]" LOC = P67;
NET "NANASEG_2[7]" LOC = P65;