文档介绍:西北工业大学
《SOCS计实践》实验报告
学 院: 软件与微电子学院
学 号:
姓 名:
专 业:
时间:
实验地点:
实验一、编写一个自动售货机 Verilog HDL模型
一、 题目描述
编写一个自动售货机Verilog HDL模型,(1)售货机出售15分的饮料。(2)投 币器只接受5分和1角硬币。(3)必须提供适当数目的零钱,投币器不找钱。
二、实验内容
1)定义状态,并画出状态转换图,解释设计思路;
答:我在设计本题所要求的售货机时使用了 4个状态,分别为start (00), st1
(01), st2 (10), st3 (11)其中在第三个状态是输出 out为1,其他的三个状 态输出为00状态转换图如下所示:
其中状态机在跳到st3时,fiVt3直接跳的start状态这使得out只在投币 后的一个时钟周期处于高电平而不会长期处于高电平的状态, 这与现实的只输出
一瓶饮料的结果不相符。 St1
2)使用Verilog语言完成设计; i一
解:自动售货机的verilog代码如n=所示: / Five=
module AUTOSEL(five,ten,clk,rst,oen=
input ten,five; St3 input clk;—— input rst;
Five
St2
output out;
wire out;
ten=
reg [1:0]state;
parameter st0=2'b00,
st1=2'b01, st2=2'b10, st3=2'b11;
always@(posedge clk or negedge rst)
begin
if(rst==0)
begin
state<=st0;
end else
begin
case(state)
st0:
begin
if(five==1)
begin state<=st1;
end
else
begin
if(ten==1) begin state<=st2;
end
else
begin state<=st0;
end
end
end
st1:
begin
if(five==1)
begin state<=st2;
end
else
begin
if(ten==1) begin state<=st3;
end
else begin state<=st1;
end
end
end
s⑵
begin
iffive==1)
begin
state<=st3;
end
else
begin
if(ten==1)
begin
state<=st3;
end
else
begin
state<=st2;
end
end
end
st3:
begin
state<=st0;
end
default:
begin
state<=st0;
end
endcase
end
end
assign out=(state==st3)?1:0;
endmodule
3)编写testbench ,并使用Synopsys VCS进行仿真; 答:testbench测试代码如下: module testbench;
reg clk,rst_n;
reg five_cents,ten_cents;
wire soda_out;
always #1 clk=~clk;
initial
begin
clk=0;
five_cents=0;
ten_cents=0;
rst_n=1;
10 rst_n=0;
10 rst_n=1;
//1 三个五分的
10 five_cents=1;
2 five_cents=0;
10 five_cents=1;
2 five_cents=0;
10 five_cents=1;
2 five_cents=0;
//2 一个五分,一个十分
20 five_cents=1;
2 five_cents=0;
10 ten_cents=1;
2 ten_cents=0;
//3 两个十分
20 ten_cents=1;
2 ten_cents=0;
10 ten_cents=1;
2 ten_cents=0;
//4 一个十分,一个五分
20 ten_cents