2021年4月9日 星期五

使用Quartus-II 9.1SP2 + ModelSim 6.5b-Aletra + Altera DE2-115 FPGA開發平台,設計 8-bit ALU part2 為例(FPGA開發平台)

使用Quartus-II 9.1SP2 + ModelSim 6.5b-Aletra + Altera DE2-115 FPGA開發平台,設計 8-bit ALU part2 為例(FPGA開發平台)


    3'b000: y = a + b;      // op=000, 執行  a + b
    3'b001: y = a + 1;      // op=001, 執行  a + 1
    3'b010: y = a - b;      // op=010, 執行  a - b
    3'b011: y = a ^ b;      // op=011, 執行  a xor b
    3'b100: y = a | b;      // op=100, 執行  a or b
    3'b101: y = a & b;      // op=101, 執行  a and b
    3'b110: y = ~a;         // op=110, 執行  not a
    3'b111: y = a<<1;       // op=111, 執行  a << 1’b1



module DE2_115 (SW, LEDR, LEDG , CLOCK_50 ,KEY ,HEX0 ,HEX1 ,HEX2,HEX3,HEX4 ,HEX5 ,HEX6,HEX7, GPIO );
 input  [17:0] SW;   // toggle switches
 input  [7:0] KEY;       // Push bottom
 input  CLOCK_50;   //Clock 27MHz , 50Mhz
 output [17:0] LEDR;   // red  LEDS
 output [8:0] LEDG;   // green LEDs
 output [6:0] HEX0,HEX1,HEX2,HEX3; //7-segment display
 output [6:0] HEX4,HEX5,HEX6,HEX7; //7-segment display
 inout  [35:0] GPIO;
 assign HEX0=7'b111_1111;
 assign HEX1=7'b111_1111;
 assign HEX2=7'b111_1111;
 assign HEX3=7'b111_1111;
 assign HEX4=7'b111_1111;
 assign HEX5=7'b111_1111;
 assign HEX6=7'b111_1111;
 assign HEX7=7'b111_1111;
 
//reg8 (reset_n,EN, CLK, Din, Qout);
// input reset_n;
// input CLK;
// input EN,
// input [7:0] Din;
// output [7:0] Qout;
wire [15:0]reg_temp;
assign LEDR=reg_temp;

reg8 u0(KEY[0], SW[17],CLOCK_50,SW[7:0],reg_temp[7:0]);
reg8 u1(KEY[0], SW[16],CLOCK_50,SW[7:0],reg_temp[15:8]);

//alu(input [7:0] a, input [7:0] b, input [2:0] op, output reg [7:0] y);
alu u2(reg_temp[7:0],reg_temp[15:8],SW[15:13],LEDG[7:0]);
endmodule

//ALU_8bit_REG
module reg8 (reset_n,EN, CLK, Din, Qout);
input reset_n;
input CLK;
input EN;
input [7:0] Din;
output [7:0] Qout;
reg [7:0] Qout;
always @(posedge CLK , negedge reset_n )
begin
if (!reset_n)
Qout = 0;
else if (EN)
Qout = Din;
end
endmodule // reg8

// 輸入 a, b 後會執行 op 所指定的運算,然後將結果放在暫存器 y 當中
module alu(input [7:0] a, input [7:0] b, input [2:0] op, output reg [7:0] y);
always@(a or b or op) begin // 當 a, b 或 op 有改變時,就進入此區塊執行。
  case(op)                  // 根據 op 決定要執行何種運算
    3'b000: y = a + b;      // op=000, 執行  a + b
    3'b001: y = a + 1;      // op=001, 執行  a + 1
    3'b010: y = a - b;      // op=010, 執行  a - b
    3'b011: y = a ^ b;      // op=011, 執行  a xor b
    3'b100: y = a | b;      // op=100, 執行  a or b
    3'b101: y = a & b;      // op=101, 執行  a and b
    3'b110: y = ~a;         // op=110, 執行  not a
    3'b111: y = a<<1;       // op=111, 執行  a << 1’b1
  endcase
end
endmodule


沒有留言:

張貼留言

OPEN DATA AQI 空氣品質監測網 + NODE-RED

OPEN DATA AQI 空氣品質監測網 + NODE-RED  首頁 - 空氣品質監測網  https://airtw.moenv.gov.tw/ https://data.gov.tw/datasets/search?p=1&size=10&s=_score...