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 5 years have passed since last update.

windowsでiverilog その22

Posted at

概要

windowsでiverilogやってみた。
stack書いてみる。

サンプルコード



module stack(top_out, next_out, top_in, next_in, pop, push, w_tos, w_next, clk, rst);
	output [15:0] top_out,
		next_out;
	input [15:0] top_in,
		next_in;
	input pop,
		push,
		w_tos,
		w_next,
		clk,
		rst;
	reg [15:0] top_out,
		next_out;
	reg [15:0] stack_ram[31:0];
	reg [4:0] tos_position,
		next_position;
	always @(posedge clk or posedge rst)
	begin
		if (rst == 1)
		begin
			tos_position = 5'b0;
			next_position = 5'b11111;
		end
		else if (clk == 1)
		begin
			if (pop == 1)
			begin
				tos_position = tos_position - 1;
				next_position = next_position - 1;
			end
			else if (push == 1)
			begin
				tos_position = tos_position + 1;
				next_position = next_position + 1;
			end
			if (w_tos == 1)
				stack_ram[tos_position] = top_in;
			if (w_next == 1)
				stack_ram[next_position] = next_in;
			top_out = stack_ram[tos_position];
			next_out = stack_ram[next_position];
		end
	end
endmodule

module test;
	reg [15:0] top_in;
	reg [15:0] next_in;
	reg pop;
	reg push;
	reg w_tos;
	reg w_next;
	reg clk;
	reg rst;
	wire [15:0] top_out;
	wire [15:0] next_out;
	stack u(.top_out(top_out), .next_out(next_out), .top_in(top_in), .next_in(next_in), .pop(pop), .push(push), .w_tos(w_tos), .w_next(w_next), .clk(clk), .rst(rst));
	initial
	begin
		$display("clk rst in out");
		$monitor("%b %b %h %h", clk, rst, top_in, top_out);
		top_in = 0;
		next_in = 0;
		pop = 0;
		push = 0;
		w_tos = 0;
		w_next = 0;
		clk = 0;
		rst = 0;
		#10
			rst = 1;
		#10
			rst = 0;
		#10
			top_in = 16'b1100110011001100;
			w_tos = 1;
		#10
			top_in = 16'b0011001100110011;
			push = 1;
		#10
			top_in = 16'b0011100110100101;
		#10
			top_in = 16'b1011001110001111;
		#10
			w_tos = 0;
			pop = 1;
		#10
			next_in = 16'b1111111100000000;
			w_next = 1;
			pop = 0;
		#10
			$finish;
	end
	always
	begin
		#5
			clk = 1;
		#5
			clk = 0;
	end
endmodule





実行結果



clk rst in out
0 0 0000 xxxx
1 0 0000 xxxx
0 1 0000 xxxx
1 1 0000 xxxx
0 0 0000 xxxx
1 0 0000 xxxx
0 0 cccc xxxx
1 0 cccc cccc
0 0 3333 cccc
1 0 3333 3333
0 0 39a5 3333
1 0 39a5 39a5
0 0 b38f 39a5
1 0 b38f b38f
0 0 b38f b38f
1 0 b38f 39a5
0 0 b38f 39a5
1 0 b38f b38f
0 0 b38f b38f


以上。

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?