渡部/春のプロジェクト
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[渡部]]
*DE2実装 [#c7ea57a1]
-加算器
--2桁と2桁の加算(10進数)
--スライドスイッチを4つを2進数として1つの数字を7segに表示する。
--HEX7,HEX6 と HEX5,HEX4が加算する値を出力。
--HEX2,HEX1,HEX0で加算した値を出力。
--HEX3はHEX4〜HEX7に10以上の値を表示させようとするとEが表示される。(エラー処理)
--if文を使おうとしたができなかった。
--エラー処理のときに加算された値を表示しないようにしたかった。
-source code
--DE2_TOP.v
`include"seven_dec.v"
module DE2_TOP (
// Outputs
HEX0, HEX1, HEX2, HEX3, HEX4, HEX5, HEX6, HEX7, LEDG, LEDR,
// Inputs
CLOCK_50, KEY, SW
);
// Clock Inpunt
input CLOCK_50; // 50 MHz
// Push Button
input [3:0] KEY; // Button[3:0]
// DPDT Switch
input [17:0] SW; // DPDT Switch[17:0]
// 7-SEG Display
output [6:0] HEX0; // Seven Segment Digital 0
output [6:0] HEX1; // Seven Segment Digital 1
output [6:0] HEX2; // Seven Segment Digital 2
output [6:0] HEX3; // Seven Segment Digital 3
output [6:0] HEX4; // Seven Segment Digital 4
output [6:0] HEX5; // Seven Segment Digital 5
output [6:0] HEX6; // Seven Segment Digital 6
output [6:0] HEX7; // Seven Segment Digital 7
// LED
output [8:0] LEDG; // LED Green[8:0]
output [17:0] LEDR; // LED Red[17:0]
reg [6:0] HEX3;
// Unused I/O pins
//assign HEX0 = 7'h7f;
//assign HEX1 = 7'h7f;
//assign HEX2 = 7'h7f;
//assign HEX3 = 7'h7f;
//assign HEX4 = 7'h7f;
//assign HEX5 = 7'h7f;
//assign HEX6 = 7'h7f;
//assign HEX7 = 7'h7f;
assign LEDG = 9'h000;
assign LEDR[1:0] = 2'h00000;
assign LEDR[2] = 1;
assign LEDR[6] = 1;
assign LEDR[10] = 1;
assign LEDR[14] = 1;
wire a,b,c,d;
assign a = (SW[17:14] > 9) ? 1 : 0;
assign b = (SW[13:10] > 9) ? 1 : 0;
assign c = (SW[9:6] > 9) ? 1 : 0;
assign d = (SW[5:2] > 9) ? 1 : 0;
assign LEDR[17] = a;
assign LEDR[16] = a;
assign LEDR[15] = a;
assign LEDR[13] = b;
assign LEDR[12] = b;
assign LEDR[11] = b;
assign LEDR[9] = c;
assign LEDR[8] = c;
assign LEDR[7] = c;
assign LEDR[5] = d;
assign LEDR[4] = d;
assign LEDR[3] = d;
always @(posedge CLOCK_50)
begin
if((SW[17:14] > 9) || (SW[13:10] > 9) || (SW[9:6] > 9) || (SW[5:2] > 9))
begin
HEX3 = 7'b0000110;
//HEX0 = 7'b1111111;
//HEX1 = 7'b1111111;
//HEX2 = 7'b1111111;
//assign LEDR[15] = 1;
//assign LEDR[16] = 1;
//assign LEDR[17] = 1;
end
else HEX3 = 7'b1111111;
/*
else if(SW[13:10] > 9)
begin
assign LEDR[11] = 1;
assign LEDR[12] = 1;
assign LEDR[13] = 1;
end
else if(SW[9:6] > 9)
begin
assign LEDR[7] = 1;
assign LEDR[8] = 1;
assign LEDR[9] = 1;
end
else if(SW[5:2] > 9)
begin
assign LEDR[3] = 1;
assign LEDR[4] = 1;
assign LEDR[5] = 1;
end
*/
end
wire [4:0] adder1, adder2;
wire count1, count2;
assign adder1 = (SW[13:10]+SW[5:2]< 10) ? (SW[13:10]+SW[5:2]) : (SW[13:10]+SW[5:2] - 10);
assign adder2 = (SW[17:14]+SW[9:6]< 10) ? (SW[17:14]+SW[9:6]) : (SW[17:14]+SW[9:6] - 10);
assign count1 = (SW[13:10]+SW[5:2]< 10) ? 0 : 1;
assign count2 = (SW[17:14]+SW[9:6]< 10) ? 0 : 1;
seven_dec i0(.din(SW[17:14]), .dout(HEX7));
seven_dec i1(.din(SW[13:10]), .dout(HEX6));
seven_dec i2(.din(SW[9:6]), .dout(HEX5));
seven_dec i3(.din(SW[5:2]), .dout(HEX4));
seven_dec i4(.din(adder1[3:0]), .dout(HEX0));
seven_dec i5(.din(adder2[3:0] + count1), .dout(HEX1));
seven_dec i6(.din(count2), .dout(HEX2));
//seven_dec i4(.din(SW[17:14]*10+SW[13:10]+SW[9:6]*10+SW[5:2]), .dout0(HEX0), .dout1(HEX1));
endmodule // DE2_TOP
--seven_dec.v
module seven_dec(din,dout);
input[3:0] din;
output[6:0] dout;
reg[6:0] dout;
always @ (din)
case (din)
4'b0000 : dout = 7'b1000000;
4'b0001 : dout = 7'b1111001;
4'b0010 : dout = 7'b0100100;
4'b0011 : dout = 7'b0110000;
4'b0100 : dout = 7'b0011001;
4'b0101 : dout = 7'b0010010;
4'b0110 : dout = 7'b0000010;
4'b0111 : dout = 7'b1011000;
4'b1000 : dout = 7'b0000000;
4'b1001 : dout = 7'b0011000;
4'b1010 : dout = 7'b1111111;
4'b1011 : dout = 7'b1111111;
4'b1100 : dout = 7'b1111111;
4'b1101 : dout = 7'b1111111;
4'b1110 : dout = 7'b1111111;
4'b1111 : dout = 7'b1111111;
default : dout = 7'bxxxxxxx;
endcase
endmodule
#comment
終了行:
[[渡部]]
*DE2実装 [#c7ea57a1]
-加算器
--2桁と2桁の加算(10進数)
--スライドスイッチを4つを2進数として1つの数字を7segに表示する。
--HEX7,HEX6 と HEX5,HEX4が加算する値を出力。
--HEX2,HEX1,HEX0で加算した値を出力。
--HEX3はHEX4〜HEX7に10以上の値を表示させようとするとEが表示される。(エラー処理)
--if文を使おうとしたができなかった。
--エラー処理のときに加算された値を表示しないようにしたかった。
-source code
--DE2_TOP.v
`include"seven_dec.v"
module DE2_TOP (
// Outputs
HEX0, HEX1, HEX2, HEX3, HEX4, HEX5, HEX6, HEX7, LEDG, LEDR,
// Inputs
CLOCK_50, KEY, SW
);
// Clock Inpunt
input CLOCK_50; // 50 MHz
// Push Button
input [3:0] KEY; // Button[3:0]
// DPDT Switch
input [17:0] SW; // DPDT Switch[17:0]
// 7-SEG Display
output [6:0] HEX0; // Seven Segment Digital 0
output [6:0] HEX1; // Seven Segment Digital 1
output [6:0] HEX2; // Seven Segment Digital 2
output [6:0] HEX3; // Seven Segment Digital 3
output [6:0] HEX4; // Seven Segment Digital 4
output [6:0] HEX5; // Seven Segment Digital 5
output [6:0] HEX6; // Seven Segment Digital 6
output [6:0] HEX7; // Seven Segment Digital 7
// LED
output [8:0] LEDG; // LED Green[8:0]
output [17:0] LEDR; // LED Red[17:0]
reg [6:0] HEX3;
// Unused I/O pins
//assign HEX0 = 7'h7f;
//assign HEX1 = 7'h7f;
//assign HEX2 = 7'h7f;
//assign HEX3 = 7'h7f;
//assign HEX4 = 7'h7f;
//assign HEX5 = 7'h7f;
//assign HEX6 = 7'h7f;
//assign HEX7 = 7'h7f;
assign LEDG = 9'h000;
assign LEDR[1:0] = 2'h00000;
assign LEDR[2] = 1;
assign LEDR[6] = 1;
assign LEDR[10] = 1;
assign LEDR[14] = 1;
wire a,b,c,d;
assign a = (SW[17:14] > 9) ? 1 : 0;
assign b = (SW[13:10] > 9) ? 1 : 0;
assign c = (SW[9:6] > 9) ? 1 : 0;
assign d = (SW[5:2] > 9) ? 1 : 0;
assign LEDR[17] = a;
assign LEDR[16] = a;
assign LEDR[15] = a;
assign LEDR[13] = b;
assign LEDR[12] = b;
assign LEDR[11] = b;
assign LEDR[9] = c;
assign LEDR[8] = c;
assign LEDR[7] = c;
assign LEDR[5] = d;
assign LEDR[4] = d;
assign LEDR[3] = d;
always @(posedge CLOCK_50)
begin
if((SW[17:14] > 9) || (SW[13:10] > 9) || (SW[9:6] > 9) || (SW[5:2] > 9))
begin
HEX3 = 7'b0000110;
//HEX0 = 7'b1111111;
//HEX1 = 7'b1111111;
//HEX2 = 7'b1111111;
//assign LEDR[15] = 1;
//assign LEDR[16] = 1;
//assign LEDR[17] = 1;
end
else HEX3 = 7'b1111111;
/*
else if(SW[13:10] > 9)
begin
assign LEDR[11] = 1;
assign LEDR[12] = 1;
assign LEDR[13] = 1;
end
else if(SW[9:6] > 9)
begin
assign LEDR[7] = 1;
assign LEDR[8] = 1;
assign LEDR[9] = 1;
end
else if(SW[5:2] > 9)
begin
assign LEDR[3] = 1;
assign LEDR[4] = 1;
assign LEDR[5] = 1;
end
*/
end
wire [4:0] adder1, adder2;
wire count1, count2;
assign adder1 = (SW[13:10]+SW[5:2]< 10) ? (SW[13:10]+SW[5:2]) : (SW[13:10]+SW[5:2] - 10);
assign adder2 = (SW[17:14]+SW[9:6]< 10) ? (SW[17:14]+SW[9:6]) : (SW[17:14]+SW[9:6] - 10);
assign count1 = (SW[13:10]+SW[5:2]< 10) ? 0 : 1;
assign count2 = (SW[17:14]+SW[9:6]< 10) ? 0 : 1;
seven_dec i0(.din(SW[17:14]), .dout(HEX7));
seven_dec i1(.din(SW[13:10]), .dout(HEX6));
seven_dec i2(.din(SW[9:6]), .dout(HEX5));
seven_dec i3(.din(SW[5:2]), .dout(HEX4));
seven_dec i4(.din(adder1[3:0]), .dout(HEX0));
seven_dec i5(.din(adder2[3:0] + count1), .dout(HEX1));
seven_dec i6(.din(count2), .dout(HEX2));
//seven_dec i4(.din(SW[17:14]*10+SW[13:10]+SW[9:6]*10+SW[5:2]), .dout0(HEX0), .dout1(HEX1));
endmodule // DE2_TOP
--seven_dec.v
module seven_dec(din,dout);
input[3:0] din;
output[6:0] dout;
reg[6:0] dout;
always @ (din)
case (din)
4'b0000 : dout = 7'b1000000;
4'b0001 : dout = 7'b1111001;
4'b0010 : dout = 7'b0100100;
4'b0011 : dout = 7'b0110000;
4'b0100 : dout = 7'b0011001;
4'b0101 : dout = 7'b0010010;
4'b0110 : dout = 7'b0000010;
4'b0111 : dout = 7'b1011000;
4'b1000 : dout = 7'b0000000;
4'b1001 : dout = 7'b0011000;
4'b1010 : dout = 7'b1111111;
4'b1011 : dout = 7'b1111111;
4'b1100 : dout = 7'b1111111;
4'b1101 : dout = 7'b1111111;
4'b1110 : dout = 7'b1111111;
4'b1111 : dout = 7'b1111111;
default : dout = 7'bxxxxxxx;
endcase
endmodule
#comment
ページ名: