OpenCores
URL https://opencores.org/ocsvn/thor/thor/trunk

Subversion Repositories thor

[/] [thor/] [trunk/] [FT64v5/] [rtl/] [common/] [FT64_pic.v] - Diff between revs 51 and 52

Show entire file | Details | Blame | View Log

Rev 51 Rev 52
Line 55... Line 55...
//                      This register resets the edge sense circuitry
//                      This register resets the edge sense circuitry
//                      indicated by the low order five bits of the input data.
//                      indicated by the low order five bits of the input data.
//
//
//  0x80    - irq control for irq #0
//  0x80    - irq control for irq #0
//  0x84    - irq control for irq #1
//  0x84    - irq control for irq #1
//            bits 0 to 6  = cause code to issue
//            bits 0 to 7  = cause code to issue
//            bits 8 to 10 = irq level to issue
//            bits 8 to 11 = irq level to issue
//            bit 16 = irq enable
//            bit 16 = irq enable
//            bit 17 = edge sensitivity
//            bit 17 = edge sensitivity
//=============================================================================
//=============================================================================
 
 
module FT64_pic
module FT64_pic
Line 95... Line 95...
reg [31:0] iedge;
reg [31:0] iedge;
reg [31:0] rste;
reg [31:0] rste;
reg [31:0] es;
reg [31:0] es;
reg [5:0] cause_base;
reg [5:0] cause_base;
reg [3:0] irq [0:31];
reg [3:0] irq [0:31];
reg [6:0] cause [0:31];
reg [7:0] cause [0:31];
integer n;
integer n;
 
 
initial begin
initial begin
        ie <= 32'h0;
        ie <= 32'h0;
        es <= 32'hFFFFFFFF;
        es <= 32'hFFFFFFFF;
        rste <= 32'h0;
        rste <= 32'h0;
        for (n = 0; n < 32; n = n + 1) begin
        for (n = 0; n < 32; n = n + 1) begin
                cause[n] <= 7'h00;
                cause[n] <= 8'h00;
                irq[n] <= 4'h8;
                irq[n] <= 4'h8;
        end
        end
end
end
 
 
wire cs = cyc_i && stb_i && adr_i[31:8]==pIOAddress[31:8];
wire cs = cyc_i && stb_i && adr_i[31:8]==pIOAddress[31:8];
Line 136... Line 136...
                                ie[dat_i[4:0]] <= adr_i[2];
                                ie[dat_i[4:0]] <= adr_i[2];
                        6'd4:   es <= dat_i[31:0];
                        6'd4:   es <= dat_i[31:0];
                        6'd5:   rste[dat_i[4:0]] <= 1'b1;
                        6'd5:   rste[dat_i[4:0]] <= 1'b1;
                        6'b1?????:
                        6'b1?????:
                             begin
                             begin
                                 cause[adr_i[6:2]] <= dat_i[6:0];
                                 cause[adr_i[6:2]] <= dat_i[7:0];
                                 irq[adr_i[6:2]] <= dat_i[11:8];
                                 irq[adr_i[6:2]] <= dat_i[11:8];
                                 ie[adr_i[6:2]] <= dat_i[16];
                                 ie[adr_i[6:2]] <= dat_i[16];
                                 es[adr_i[6:2]] <= dat_i[17];
                                 es[adr_i[6:2]] <= dat_i[17];
                             end
                             end
                        endcase
                        endcase
Line 153... Line 153...
        if (irqenc!=5'd0)
        if (irqenc!=5'd0)
                $display("PIC: %d",irqenc);
                $display("PIC: %d",irqenc);
        if (cs)
        if (cs)
                casez (adr_i[7:2])
                casez (adr_i[7:2])
                6'd0:   dat_o <= {cause_base,3'd0} + irqenc;
                6'd0:   dat_o <= {cause_base,3'd0} + irqenc;
                6'b1?????: dat_o <= {es[adr_i[6:2]],ie[adr_i[6:2]],4'b0,irq[adr_i[6:2]],1'b0,cause[adr_i[6:2]]};
                6'b1?????: dat_o <= {es[adr_i[6:2]],ie[adr_i[6:2]],4'b0,irq[adr_i[6:2]],cause[adr_i[6:2]]};
                default:        dat_o <= ie;
                default:        dat_o <= ie;
                endcase
                endcase
        else
        else
                dat_o <= 32'h0000;
                dat_o <= 32'h0000;
end
end
 
 
assign irqo = (irqenc == 5'h0) ? 4'd0 : irq[irqenc];
assign irqo = (irqenc == 5'h0) ? 4'd0 : irq[irqenc];
assign causeo = (irqenc == 5'h0) ? 7'd0 : cause[irqenc];
assign causeo = (irqenc == 5'h0) ? 8'd0 : cause[irqenc];
assign nmio = nmii & ie[0];
assign nmio = nmii & ie[0];
 
 
// Edge detect circuit
// Edge detect circuit
always @(posedge clk_i)
always @(posedge clk_i)
begin
begin

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.