SOC设计实验报告
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//3两个十分
#20 ten_cents=1;
#2 ten_cents=0;
#10 ten_cents=1;
#2 ten_cents=0;
//4一个十分,一个五分
#20 ten_cents=1;
#2 ten_cents=0;
#10 five_cents=1;
#2 five_cents=0;
//5两个五分,一个十分
Report : timing
-path full
-delay max
-max_paths 1
Design : AUTOSEL
Version: G-2012.06-SP4
Date : Tue May 20 20:15:05 2014
****************************************
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;
-----------------------------------------------------------
slack (MET) 388.83
左侧一列是每一项计划所用的时间,右侧一列是到目前所用的总时间,而且我们可以看出来实际的到达时间远远小于要求的时间,因此时序方面是满足设计要求的。
1
output external delay -80.00 410.20
data required time 410.20
-----------------------------------------------------------
data required time 410.20
data arrival time -21.37
out (out) 0.00 * 21.37 r
data arrival time 21.37
clock clk (rise edge) 490.20 490.20
clock network delay (ideal) 20.00 510.20
clock uncertainty -20.00 490.20
(rising edge-triggered flip-flop clocked by clk)
Endpoint: out (output port clocked by clk)
Patpe: max
Point Incr Path
-----------------------------------------------------------
二、实验内容
1)定义状态,并画出状态转换图,解释设计思路;
答:我在设计本题所要求的售货机时使用了4个状态,分别为start(00),st1(01),st2(10),st3(11)其中在第三个状态是输出out为1,其他的三个状态输出为0。状态转换图如下所示:
其中状态机在跳到st3时,由st3直接跳的start状态这使得out只在投币后的一个时钟周期处于高电平而不会长期处于高电平的状态,这与现实的只输出一瓶饮料的结果不相符。
Number of sequential cells: 2
Number of macros: 0
Number of buf/inv: 0
Number of references: 6
Combinational area: 10.000000
begin
state<=st1;
end
end
end
st2:
begin
if(five==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;
redirect -tee -file rc.rpt {report_constraint -all}
redirect -tee -file rt.rpt {report_timing}
redirect -tee -file ra.rpt {report_area}
#产生各种约束的报告
write -f ddc -hier -out autosel.ddc
分析与讨论在做本次试验时由于刚开始使用的投币信号的脉冲较宽使得输出信号在时输出信号有效的最后一个信号为高时状态发生了连续的跳转最后的输出信号也发生了迅速的变化考虑时序之后使用单周期脉冲的输入信号使得输出信号在下一个周期有效而在过一个周期由于此时输入信号无效使得状态不再改变而使得输出信号也只有在一个周期内为高电平从而满足了要求
答:autosel.con约束文件如下:
##################Constrain######################
#reset_design
create_clock -period 490.2 [get_ports clk]
#创建频率为2.04MHz的时钟信号
set_clock_latency -source -max 10 [get_clocks clk]
Version: G-2012.06-SP4
Date : Tue May 20 20:15:05 2014
****************************************
This design has no violated constraints.
1
产生的rt.rpt文件:
****************************************
产生的ra.rpt文件:
****************************************
Report : area
Design : AUTOSEL
Version: G-2012.06-SP4
Date : Tue May 20 20:15:05 2014
****************************************
Library(s) Used:
cb13fs120_tsmc_max (File: /cad/share/ref/libs/mw_lib/sc/LM/sc_max.db)
Number of ports: 5
Number of nets: 15
Number of cells: 8
Number of combinational cells: 6
set_input_delay -max 60 -clock clk [get_ports five]
set_driving_cell -lib_cell bufbd7 [all_inputs]
set_output_delay -max 80 -clock clk [get_ports out]
set_load [load_of cb13fs120_tsmc_max/bufbd7/I] [get_ports out]
read_verilog ./rtl/autosel.v
#读文件
Link
#连接到目标库
check_design
#检测设计是否由问题
source ./scripts/autosel.con
#加上约束文件
check_timing
#检测时序
compile_ultra -scan -retime
#对文件进行编译
#20 five_cents=1;
#2 five_cents=0;
#10 five_cents=1;
#2 five_cents=0;
#10 ten_cents=1;
#2 ten_cents=0;
#10
$stop;
end
AUTOSEL AUTOSEL(five_cents,ten_cents,clk,rst_n,soda_out);
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
set_clock_latency -max 10 [get_clocks clk]
set_clock_uncertainty -setup 20 [get_clocks clk]
set_clock_transition 10 [get_clocks clk]
set_input_delay -max 60 -clock clk [get_ports ten]
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;
clock clk (rise edge) 0.00 0.00
clock network delay (ideal) 20.00 20.00
state_reg[0]/CP (sdcrb1) 0.00 20.00 r
state_reg[0]/Q (sdcrb1) 1.23 21.23 r
U15/Z (an02d1) 0.14 * 21.37 r
Endmodule
测试波形图如下所示:
Autosel-vcs仿真波形
最下边一行代表的是投5分,倒数第二行代表的是复位信号,第三行是时钟信号,第二行是投10分,由图可知,在投3个5分,1个5分、1个10分,两个10分,1个10分、1个5分,2个5分、1个10分都可使输出信号为1,满足题意要求。
4)使用Synopsys DC进行综合。
* Some/all delay information is back-annotated.
Operating Conditions: cb13fs120_tsmc_max Library: cb13fs120_tsmc_max
Wire Load Model Mode: Inactive.
Startpoint: state_reg[0]
set_max_area 10000
DC综合脚本文件dc.tcl如下:
############run script####################
printvar target_library
printvar link_library
check_library
check_tlu_plus_files
#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;
#生成最后的.ddc文件
产生的rc.rpt文件:
Information: Updating design information... (UID-85)
****************************************
Report : constraint
-all_violators
Design : AUTOSEL
西北工业大学
《SOC设计实践》实验报告
学院:
软件与微电子学院
学 号:
姓 名:
专业:
时 间:
实验地点:
实验一、编写一个自动售货机Verilog HDL模型
一、题目描述
编写一个自动售货机Verilog HDL模型,(1)售货机出售15分的饮料。(2)投币器只接受5分和1角硬币。(3)必须提供适当数目的零钱,投币器不找钱。
2)使用Verilog语言完成设计;
解:自动售货机的verilog代码如下所示:
module AUTOSEL(five,ten,clk,rst,out);
input ten,five;
input clk;
input rst;
output out;
wire out;
reg [1:0]state;
parameter st0=2'b00,
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;
#20 ten_cents=1;
#2 ten_cents=0;
#10 ten_cents=1;
#2 ten_cents=0;
//4一个十分,一个五分
#20 ten_cents=1;
#2 ten_cents=0;
#10 five_cents=1;
#2 five_cents=0;
//5两个五分,一个十分
Report : timing
-path full
-delay max
-max_paths 1
Design : AUTOSEL
Version: G-2012.06-SP4
Date : Tue May 20 20:15:05 2014
****************************************
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;
-----------------------------------------------------------
slack (MET) 388.83
左侧一列是每一项计划所用的时间,右侧一列是到目前所用的总时间,而且我们可以看出来实际的到达时间远远小于要求的时间,因此时序方面是满足设计要求的。
1
output external delay -80.00 410.20
data required time 410.20
-----------------------------------------------------------
data required time 410.20
data arrival time -21.37
out (out) 0.00 * 21.37 r
data arrival time 21.37
clock clk (rise edge) 490.20 490.20
clock network delay (ideal) 20.00 510.20
clock uncertainty -20.00 490.20
(rising edge-triggered flip-flop clocked by clk)
Endpoint: out (output port clocked by clk)
Patpe: max
Point Incr Path
-----------------------------------------------------------
二、实验内容
1)定义状态,并画出状态转换图,解释设计思路;
答:我在设计本题所要求的售货机时使用了4个状态,分别为start(00),st1(01),st2(10),st3(11)其中在第三个状态是输出out为1,其他的三个状态输出为0。状态转换图如下所示:
其中状态机在跳到st3时,由st3直接跳的start状态这使得out只在投币后的一个时钟周期处于高电平而不会长期处于高电平的状态,这与现实的只输出一瓶饮料的结果不相符。
Number of sequential cells: 2
Number of macros: 0
Number of buf/inv: 0
Number of references: 6
Combinational area: 10.000000
begin
state<=st1;
end
end
end
st2:
begin
if(five==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;
redirect -tee -file rc.rpt {report_constraint -all}
redirect -tee -file rt.rpt {report_timing}
redirect -tee -file ra.rpt {report_area}
#产生各种约束的报告
write -f ddc -hier -out autosel.ddc
分析与讨论在做本次试验时由于刚开始使用的投币信号的脉冲较宽使得输出信号在时输出信号有效的最后一个信号为高时状态发生了连续的跳转最后的输出信号也发生了迅速的变化考虑时序之后使用单周期脉冲的输入信号使得输出信号在下一个周期有效而在过一个周期由于此时输入信号无效使得状态不再改变而使得输出信号也只有在一个周期内为高电平从而满足了要求
答:autosel.con约束文件如下:
##################Constrain######################
#reset_design
create_clock -period 490.2 [get_ports clk]
#创建频率为2.04MHz的时钟信号
set_clock_latency -source -max 10 [get_clocks clk]
Version: G-2012.06-SP4
Date : Tue May 20 20:15:05 2014
****************************************
This design has no violated constraints.
1
产生的rt.rpt文件:
****************************************
产生的ra.rpt文件:
****************************************
Report : area
Design : AUTOSEL
Version: G-2012.06-SP4
Date : Tue May 20 20:15:05 2014
****************************************
Library(s) Used:
cb13fs120_tsmc_max (File: /cad/share/ref/libs/mw_lib/sc/LM/sc_max.db)
Number of ports: 5
Number of nets: 15
Number of cells: 8
Number of combinational cells: 6
set_input_delay -max 60 -clock clk [get_ports five]
set_driving_cell -lib_cell bufbd7 [all_inputs]
set_output_delay -max 80 -clock clk [get_ports out]
set_load [load_of cb13fs120_tsmc_max/bufbd7/I] [get_ports out]
read_verilog ./rtl/autosel.v
#读文件
Link
#连接到目标库
check_design
#检测设计是否由问题
source ./scripts/autosel.con
#加上约束文件
check_timing
#检测时序
compile_ultra -scan -retime
#对文件进行编译
#20 five_cents=1;
#2 five_cents=0;
#10 five_cents=1;
#2 five_cents=0;
#10 ten_cents=1;
#2 ten_cents=0;
#10
$stop;
end
AUTOSEL AUTOSEL(five_cents,ten_cents,clk,rst_n,soda_out);
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
set_clock_latency -max 10 [get_clocks clk]
set_clock_uncertainty -setup 20 [get_clocks clk]
set_clock_transition 10 [get_clocks clk]
set_input_delay -max 60 -clock clk [get_ports ten]
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;
clock clk (rise edge) 0.00 0.00
clock network delay (ideal) 20.00 20.00
state_reg[0]/CP (sdcrb1) 0.00 20.00 r
state_reg[0]/Q (sdcrb1) 1.23 21.23 r
U15/Z (an02d1) 0.14 * 21.37 r
Endmodule
测试波形图如下所示:
Autosel-vcs仿真波形
最下边一行代表的是投5分,倒数第二行代表的是复位信号,第三行是时钟信号,第二行是投10分,由图可知,在投3个5分,1个5分、1个10分,两个10分,1个10分、1个5分,2个5分、1个10分都可使输出信号为1,满足题意要求。
4)使用Synopsys DC进行综合。
* Some/all delay information is back-annotated.
Operating Conditions: cb13fs120_tsmc_max Library: cb13fs120_tsmc_max
Wire Load Model Mode: Inactive.
Startpoint: state_reg[0]
set_max_area 10000
DC综合脚本文件dc.tcl如下:
############run script####################
printvar target_library
printvar link_library
check_library
check_tlu_plus_files
#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;
#生成最后的.ddc文件
产生的rc.rpt文件:
Information: Updating design information... (UID-85)
****************************************
Report : constraint
-all_violators
Design : AUTOSEL
西北工业大学
《SOC设计实践》实验报告
学院:
软件与微电子学院
学 号:
姓 名:
专业:
时 间:
实验地点:
实验一、编写一个自动售货机Verilog HDL模型
一、题目描述
编写一个自动售货机Verilog HDL模型,(1)售货机出售15分的饮料。(2)投币器只接受5分和1角硬币。(3)必须提供适当数目的零钱,投币器不找钱。
2)使用Verilog语言完成设计;
解:自动售货机的verilog代码如下所示:
module AUTOSEL(five,ten,clk,rst,out);
input ten,five;
input clk;
input rst;
output out;
wire out;
reg [1:0]state;
parameter st0=2'b00,
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;