0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

windowsでiverilog その39

Last updated at Posted at 2020-06-30

#概要

windowsでiverilogやってみた。
俺cpuにserialつけて見た。

#写真

image

#動かしたコード

serialにaからzを吐く。

		mem[0] = 16'h1000;//push 0
		mem[1] = 16'h300f;//set 15
		mem[2] = 16'h200f;//get 15
		mem[3] = 16'h101a;//push 26
		mem[4] = 16'hf00f;//>
		mem[5] = 16'h5005;//if 5 
		mem[6] = 16'h200f;//get 15
		mem[7] = 16'h1061;//push 97
		mem[8] = 16'hf000;//+
		mem[9] = 16'he000;//out
		mem[10] = 16'h200f;//get 15
		mem[11] = 16'h1001;//push 1
		mem[12] = 16'hf000;//+
		mem[13] = 16'h300f;//set 15
		mem[14] = 16'h4002;//jp  2
		mem[15] = 16'h0000;//i

#サンプルコード

module test2(input clk, input rst, output tx, output reg led5 = 0, output reg led4 = 0, output reg led2 = 0);
	wire [2:0] cs;
	wire [15:0] irout,
		dbus,
		qtop,
		qnext,
		ramout,
		aluout,
		pcout;
	reg [15:0] in;
	reg [11:0] abus;
	reg halt = 0,
		cont = 0,
		pcinc,
		push,
		pop,
		abus2pc,
		dbus2ir,
		dbus2qtop,
		dbus2ram,
		dbus2obuf,
		pc2abus,
		ir2abus,
		ir2dbus,
		qtop2dbus,
		alu2dbus,
		ram2dbus,
		in2dbus;
	counter pc0(.clk(clk), .rst(rst), .load(abus2pc), .inc(pcinc), .d(abus), .q(pcout));
	tx2 tx2(.clk(clk), .rst(rst), .start(start), .data(out), .tx(tx), .busy(busy), .get(get));
	oneshot one0(.clk(clk), .rst(rst), .in(get), .out(get2));
	fifo fifo0(.clk(clk), .rst(rst), .put(dbus2obuf), .get(get2), .data(dbus), .out(out), .empty(empty), .start(start));
	buffer ir0(.clk(clk), .rst(rst), .load(dbus2ir), .d(dbus), .q(irout));
	state state0(.clk(clk), .rst(rst), .cont(cont), .halt(halt), .cs(cs));
	stack stack0(.clk(clk), .rst(rst), .load(dbus2qtop), .push(push), .pop(pop), .d(dbus), .qtop(qtop), .qnext(qnext));
	alu alu0(.a(qtop), .b(qnext), .f(irout[4:0]), .s(aluout));
	ram ram0(.clk(clk), .load(dbus2ram), .addr(abus[11:0]), .d(dbus), .q(ramout));
	assign dbus = ir2dbus ? {{4{irout[11]}}, irout[11:0]} : 16'hzzzz;
	assign dbus = qtop2dbus ? qtop : 16'hzzzz;
	assign dbus = alu2dbus ? aluout : 16'hzzzz;
	assign dbus = ram2dbus ? ramout : 16'hzzzz;
	assign dbus = in2dbus ? in : 16'hzzzz;
	always @(pc2abus or ir2abus)
	begin
		if (pc2abus)
		begin
			abus <= pcout;
		end
		else if (ir2abus)
		begin
			abus <= irout[11:0];
		end
		else
		begin
			abus <= 12'hxxx;
		end
	end
	always @(cs)
	begin
		halt = 0;
		pcinc = 0;
		push = 0;
		pop = 0;
		cont = 0;
		abus2pc = 0;
		dbus2ir = 0;
		dbus2qtop = 0;
		dbus2ram = 0;
		dbus2obuf = 0;
		pc2abus = 0;
		ir2abus = 0;
		ir2dbus = 0;
		qtop2dbus = 0;
		alu2dbus = 0;
		ram2dbus = 0;
		in2dbus = 0;
		led5 = 1;
		led4 = 1;
		led2 = 1;
		if (cs == `FETCHA)
		begin
			pcinc = 1;
			pc2abus = 1;
			led5 = 0;
		end
		else if (cs == `FETCHB)
		begin
			ram2dbus = 1;
			dbus2ir = 1;
			led4 = 0;
		end
		else if (cs == `EXECA)
		begin
			led2 = 0;
			case (irout[15:12])
			`PUSH:
			begin
				ir2dbus = 1;
				dbus2qtop = 1;
				push = 1;
			end
			`GET:
			begin
				ir2abus = 1;
				cont = 1;
			end
			`SET:
			begin
				ir2abus = 1;
				qtop2dbus = 1;
				dbus2ram = 1;
				pop = 1;
			end
			`JMP:
			begin
				ir2abus = 1;
				abus2pc = 1;
			end
			`JZ:
			begin
				if (qtop == 0)
				begin
					ir2abus = 1;
					abus2pc = 1;
				end
				pop = 1;
			end
			`JNZ:
			begin
				if (qtop != 0)
				begin
					ir2abus = 1;
					abus2pc = 1;
				end
				pop = 1;
			end
			`OUT:
			begin
				qtop2dbus = 1;
				dbus2obuf = 1;
				pop = 1;
			end
			`OP:
			begin
				alu2dbus = 1;
				dbus2qtop = 1;
				if (irout[4] == 0)
				begin
					pop = 1;
				end
			end
			default:
			begin
				//halt = 1;
			end
			endcase
		end
		else if (cs == `EXECB)
		begin
			if (irout[15:12] == `GET)
			begin
				ram2dbus = 1;
				dbus2qtop = 1;
				push = 1;
			end
		end
	end
endmodule

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?