Contents ...
udn網路城邦
FPGA - 使用Verilog設計SAP1(Control)
2014/12/24 13:56
瀏覽507
迴響0
推薦0
引用0

module top( opcode,decodeout1,decodeout2,decodeout3,clk,reset);
  
  input[3:0]  opcode;
  input clk,reset;
  output[6:0] decodeout1,decodeout2,decodeout3;//
  
  wire [11:0] con;
  wire[6:0] decodeout1,decodeout2,decodeout3,decodeout4;
  wire clk_out;
//divider d( clk_out,clk_in,clr );
dik d(clk_out, clk, reset);
        Control c( clk_out,  reset, con, opcode);
LED M1(con[11:8],decodeout1);   
LED M2(con[7:4],decodeout2);   
LED M3(con[3:0],decodeout3); 
  
endmodule

module Control(clk,  reset, con, opcode);
input clk,reset;
input [3:0] opcode;
output [11:0] con;
reg [11:0] con;
reg[4:0] pre;
reg[4:0] next;
 
always @ (negedge clk or posedge reset)
begin
if (reset)
pre<=0;
else pre<=next;
end
always @ (opcode or pre)
case (pre)
//reset CLR
0: begin //T1
con = 12'h5E3;
next = 1; 
end   
1: begin //T2
con = 12'hBE3;
next = 2; 
end   
2: begin //T3
con = 12'h263; 
if(opcode==0) //LDA
next=3;
else if(opcode==1) //ADD
next=6;
else if(opcode==2) //SUB
next=9;
else if(opcode==14) //OUT
next=12;
else if(opcode==15) //HLT
next=15; 
else
 next=0; 
end 
//LDA 0000
3:begin //T4
 con = 12'h1A3;
 next=4; 
end 
4:begin //T5
 con = 12'h2C3;
 next=5; 
end 
5: begin //T6
 con = 12'h3E3;
 next=0; 
end 
//ADD 0001
6: begin //T7
con = 12'h1A3;
next=7; 
end 
7:begin //T8
con = 12'h2E1;
next=8; 
end 
8:begin //T9
 con = 12'h3C7;
 next=0; 
end 
//SUB 0010
9:begin //T10
con = 12'h1A3;
next=10; 
end 
10: begin //T11
con = 12'h2E1;
next=11; 
end 
11: begin //T12
con = 12'h3CF;
  next=0; 
end 
//OUT 1110
12:begin //T13
con = 12'h3F2;
next=13; 
end 
13: begin //T14
con = 12'h3E3;
next=14; 
end 
14: begin //T15
con  = 12'h3E3;
  next=0; 
end 
//HLT 1111
15:begin //T16
con  = 12'h3E3;
next=16; 
end 
16: begin //T17
con  = 12'h3E3;
next=17; 
end 
17:begin //T18
con  = 12'h3E3;
  next=0; 
end 
default: begin
con = 12'h5E3;
next = 1; 
end
endcase
endmodule

module LED
(
q,
  ledn
  
);
  
  output ledn;
  input[3:0] q;
  
  reg [6:0] ledn;
  wire [3:0] q;
  
  always@(*)
    begin
      
      case(q)
        
        4'b0000: ledn = 7'b1000000; //0
        1: ledn = 7'b1111001; //1
        2: ledn = 7'b0100100; //2
        3: ledn = 7'b0110000; //3
        4: ledn = 7'b0011001; //4
        5: ledn = 7'b0010010; //5
        6: ledn = 7'b0000010; //6
        7: ledn = 7'b1111000; //7
        8: ledn = 7'b0000000; //8
        9: ledn = 7'b0010000; //9
 10: ledn = 7'b000_1000; //A
 11: ledn = 7'b000_0011; //B
 12: ledn = 7'b100_0110; //C
 13: ledn = 7'b010_0001; //D
 14: ledn = 7'b000_0110; //e
 15: ledn = 7'b000_1110; //f
 
        default: ledn = 7'b00000; //0
        
      endcase
      
    end
endmodule
全站分類:知識學習 隨堂筆記
自訂分類:FPGA
下一則: FPGA - 使用Verilog設計電子鐘
你可能會有興趣的文章:

限會員,要發表迴響,請先登入