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

Subversion Repositories brainfuckcpu

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /brainfuckcpu/trunk
    from Rev 6 to Rev 7
    Reverse comparison

Rev 6 → Rev 7

/testbench/brainfuck_cpu_tb.v
0,0 → 1,310
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer: Aleksander Kaminski
//
// Create Date: 04:23:50 07/08/2014
// Design Name: Braindfuck CPU
// Module Name: brainfuck_cpu_tb
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module brainfuck_cpu_tb();
 
reg clk;
reg rst;
wire [7:0] data_i;
wire [7:0] data_o;
reg [2:0] rom_i;
wire [10:0] data_addr_o;
wire [6:0] rom_addr_o;
wire rd;
wire wr;
wire mreq;
wire ioreq;
reg ready;
reg ready_fsm, ready_fsm_next;
brainfuck_cpu #(11,7,8) uut(clk, rst, data_i, data_o, rom_i, data_addr_o, rom_addr_o, rd, wr, mreq, ioreq, ready);
always @(posedge clk, posedge rst) begin
if(rst)
ready_fsm <= 0;
else
ready_fsm <= ready_fsm_next;
end
always @(*) begin
case(ready_fsm)
0: begin
ready <= 0;
if(rd||wr)
ready_fsm_next <= 1;
else
ready_fsm_next <= 0;
end
1: begin
ready <= 1;
ready_fsm_next <= 0;
end
endcase
end
initial begin
rst <= 1'b1;
clk <= 1'b0;
#100 rst <= 1'b0;
end
always
#1 clk <= ~clk;
RAMB16_S9 #(
.INIT(9'h000), // Value of output RAM registers at startup
.SRVAL(9'h000), // Output value upon SSR assertion
.WRITE_MODE("WRITE_FIRST"), // WRITE_FIRST, READ_FIRST or NO_CHANGE
 
// The forllowing INIT_xx declarations specify the initial contents of the RAM
// Address 0 to 511
.INIT_00(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_01(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_02(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_03(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_04(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_05(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_06(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_07(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_08(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_09(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_0A(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_0B(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_0C(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_0D(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_0E(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_0F(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
// Address 512 to 1023
.INIT_10(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_11(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_12(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_13(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_14(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_15(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_16(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_17(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_18(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_19(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_1A(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_1B(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_1C(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_1D(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_1E(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_1F(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
// Address 1024 to 1535
.INIT_20(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_21(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_22(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_23(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_24(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_25(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_26(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_27(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_28(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_29(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_2A(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_2B(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_2C(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_2D(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_2E(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_2F(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
// Address 1536 to 2047
.INIT_30(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_31(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_32(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_33(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_34(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_35(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_36(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_37(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_38(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_39(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_3A(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_3B(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_3C(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_3D(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_3E(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
.INIT_3F(256'h00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00),
 
// The next set of INITP_xx are for the parity bits
// Address 0 to 511
.INITP_00(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INITP_01(256'h0000000000000000000000000000000000000000000000000000000000000000),
// Address 512 to 1023
.INITP_02(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INITP_03(256'h0000000000000000000000000000000000000000000000000000000000000000),
// Address 1024 to 1535
.INITP_04(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INITP_05(256'h0000000000000000000000000000000000000000000000000000000000000000),
// Address 1536 to 2047
.INITP_06(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INITP_07(256'h0000000000000000000000000000000000000000000000000000000000000000)
) RAMB16_S9_inst (
.DO(data_i), // 8-bit Data Output
.DOP(), // 1-bit parity Output
.ADDR(data_addr_o), // 11-bit Address Input
.CLK(clk), // Clock
.DI(data_o), // 8-bit Data Input
.DIP(1'b0), // 1-bit parity Input
.EN(mreq), // RAM Enable Input
.SSR(rst), // Synchronous Set/Reset Input
.WE(wr) // Write Enable Input
);
always @(negedge clk)
if(wr && ioreq)
$display("%c", data_o);
always @(*) begin
case(rom_addr_o)
7'd0: rom_i <= 3'b010; //+
7'd1: rom_i <= 3'b010; //+
7'd2: rom_i <= 3'b010; //+
7'd3: rom_i <= 3'b010; //+
7'd4: rom_i <= 3'b010; //+
7'd5: rom_i <= 3'b010; //+
7'd6: rom_i <= 3'b010; //+
7'd7: rom_i <= 3'b010; //+
7'd8: rom_i <= 3'b010; //+
7'd9: rom_i <= 3'b010; //+
7'd10: rom_i <= 3'b110; //[
7'd11: rom_i <= 3'b001; //>
7'd12: rom_i <= 3'b010; //+
7'd13: rom_i <= 3'b010; //+
7'd14: rom_i <= 3'b010; //+
7'd15: rom_i <= 3'b010; //+
7'd16: rom_i <= 3'b010; //+
7'd17: rom_i <= 3'b010; //+
7'd18: rom_i <= 3'b010; //+
7'd19: rom_i <= 3'b001; //>
7'd20: rom_i <= 3'b010; //+
7'd21: rom_i <= 3'b010; //+
7'd22: rom_i <= 3'b010; //+
7'd23: rom_i <= 3'b010; //+
7'd24: rom_i <= 3'b010; //+
7'd25: rom_i <= 3'b010; //+
7'd26: rom_i <= 3'b010; //+
7'd27: rom_i <= 3'b010; //+
7'd28: rom_i <= 3'b010; //+
7'd29: rom_i <= 3'b010; //+
7'd30: rom_i <= 3'b001; //>
7'd31: rom_i <= 3'b010; //+
7'd32: rom_i <= 3'b010; //+
7'd33: rom_i <= 3'b010; //+
7'd34: rom_i <= 3'b001; //>
7'd35: rom_i <= 3'b010; //+
7'd36: rom_i <= 3'b000; //<
7'd37: rom_i <= 3'b000; //<
7'd38: rom_i <= 3'b000; //<
7'd39: rom_i <= 3'b000; //<
7'd40: rom_i <= 3'b011; //-
7'd41: rom_i <= 3'b111; //]
7'd42: rom_i <= 3'b001; //>
7'd43: rom_i <= 3'b010; //+
7'd44: rom_i <= 3'b010; //+
7'd45: rom_i <= 3'b101; //.
7'd46: rom_i <= 3'b001; //>
7'd47: rom_i <= 3'b010; //+
7'd48: rom_i <= 3'b101; //.
7'd49: rom_i <= 3'b010; //+
7'd50: rom_i <= 3'b010; //+
7'd51: rom_i <= 3'b010; //+
7'd52: rom_i <= 3'b010; //+
7'd53: rom_i <= 3'b010; //+
7'd54: rom_i <= 3'b010; //+
7'd55: rom_i <= 3'b010; //+
7'd56: rom_i <= 3'b101; //.
7'd57: rom_i <= 3'b101; //.
7'd58: rom_i <= 3'b010; //+
7'd59: rom_i <= 3'b010; //+
7'd60: rom_i <= 3'b010; //+
7'd61: rom_i <= 3'b101; //.
7'd62: rom_i <= 3'b001; //>
7'd63: rom_i <= 3'b010; //+
7'd64: rom_i <= 3'b010; //+
7'd65: rom_i <= 3'b101; //.
7'd66: rom_i <= 3'b000; //<
7'd67: rom_i <= 3'b000; //<
7'd68: rom_i <= 3'b010; //+
7'd69: rom_i <= 3'b010; //+
7'd70: rom_i <= 3'b010; //+
7'd71: rom_i <= 3'b010; //+
7'd72: rom_i <= 3'b010; //+
7'd73: rom_i <= 3'b010; //+
7'd74: rom_i <= 3'b010; //+
7'd75: rom_i <= 3'b010; //+
7'd76: rom_i <= 3'b010; //+
7'd77: rom_i <= 3'b010; //+
7'd78: rom_i <= 3'b010; //+
7'd79: rom_i <= 3'b010; //+
7'd80: rom_i <= 3'b010; //+
7'd81: rom_i <= 3'b010; //+
7'd82: rom_i <= 3'b010; //+
7'd83: rom_i <= 3'b101; //.
7'd84: rom_i <= 3'b001; //>
7'd85: rom_i <= 3'b101; //.
7'd86: rom_i <= 3'b010; //+
7'd87: rom_i <= 3'b010; //+
7'd88: rom_i <= 3'b010; //+
7'd89: rom_i <= 3'b101; //.
7'd90: rom_i <= 3'b011; //-
7'd91: rom_i <= 3'b011; //-
7'd92: rom_i <= 3'b011; //-
7'd93: rom_i <= 3'b011; //-
7'd94: rom_i <= 3'b011; //-
7'd95: rom_i <= 3'b011; //-
7'd96: rom_i <= 3'b101; //.
7'd97: rom_i <= 3'b011; //-
7'd98: rom_i <= 3'b011; //-
7'd99: rom_i <= 3'b011; //-
7'd100: rom_i <= 3'b011; //-
7'd101: rom_i <= 3'b011; //-
7'd102: rom_i <= 3'b011; //-
7'd103: rom_i <= 3'b011; //-
7'd104: rom_i <= 3'b011; //-
7'd105: rom_i <= 3'b101; //.
7'd106: rom_i <= 3'b001; //>
7'd107: rom_i <= 3'b010; //+
7'd108: rom_i <= 3'b101; //.
7'd109: rom_i <= 3'b001; //>
7'd110: rom_i <= 3'b101; //.
7'd111: rom_i <= 3'b110; //[
7'd112: rom_i <= 3'b010; //+
7'd113: rom_i <= 3'b011; //-
7'd114: rom_i <= 3'b111; //]
7'd115: rom_i <= 3'b000;
7'd116: rom_i <= 3'b000;
7'd117: rom_i <= 3'b000;
7'd118: rom_i <= 3'b000;
7'd119: rom_i <= 3'b000;
7'd120: rom_i <= 3'b000;
7'd121: rom_i <= 3'b000;
7'd122: rom_i <= 3'b000;
7'd123: rom_i <= 3'b000;
7'd124: rom_i <= 3'b000;
7'd125: rom_i <= 3'b000;
7'd126: rom_i <= 3'b000;
7'd127: rom_i <= 3'b000;
endcase
end
 
endmodule

powered by: WebSVN 2.1.0

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