第4章 Verilog HDL行为级建模
- 格式:ppt
- 大小:431.00 KB
- 文档页数:44
Verilog HDL优点1.能够在多个层次上对所设计的系统加以描述,从开关级、门级、寄存器传输级(RTL)到行为级等;语言不对设计的规模施加任何限制。
2.可采用行为描述、数据流描述和结构化描述三种不同方式或混合方式对设计建模。
3.具有两种数据类型;线网数据类型和寄存器数据类型。
Verilog HDL描述风格结构描述;描述设计单元的硬件结构。
数据流描述;类似寄存器传输级的方式描述数据的传输变换。
行为描述只、混合描述SOPC优势1.合理的性能组合2.提升系统的性能3.降低系统的成本4.更好满足产品生命周期的要求。
步骤1.创建一个Quartus 2工程;2.创建Nios系统模块;启动SOPC Builder;添加CPU及外围器件;指定基地址;系统设置;生成系统模块。
3.将图标添加到BDF文件中。
4.编辑Quartus 2的工程设计文件。
5.配置FPGA;启动Nios 2 IDE;建立新的软件工程;编译工程;运行工程;调试工程;将程序下载到FLASH中。
EDA仿真步骤1.分析系统设计要求和设计思想2.了解各种输出信号及2.要求3.估计各种输出的期望值4.进行实际仿真及结果3.分析5.仿真改进与完善Synplify Pro步骤1.新建工程或打开工程2.新建源工程并添加到工程3.选择工程实现设置4.选择所需研究的工程并进行逻辑综合5.查看有关逻辑综合结果ModelSim SE 6.0步骤1.新建或打开工程2.新建源程序并添加到工程3.编译源程序4.加载设计单元5.建立仿真波形6.运行仿真并观察结果。
10进制计数器posedge上升negedge下降module cnt10(clk,clr,ena,cq,co);input clk,clr,ena;output [3:0] cq;output co;reg [3:0] cnt;reg co;always @(posedge clk or posedge clr) beginif (clr)cnt<=4’b0;elseif (ena)if (cnt==4’h9)cnt<=4’h0elsecnt<=cnt+1;endassign cq=cnt;//控制进位输出并去毛刺always @(posedge clk)beginif (cnt==4’h9)co=4’h1;elseco=4’h0;endendmoduie 测试module cnt10_tb();reg clk,clr,ena;wire [3:0]cq;wire co;cnt10 ut1(clk,clr,ena,cq,co); initial$monitor($time,”clk=%b,clr=%b, cq=%b,co=%b”, clk,clr,ena,cq,co); initialbeginclk=0;clr=1;ena=0;#20 clr=0;经过20后变0#30 ena=1;经过20+30后变1 endinitialbeginforever#10 clk=~clk;endinitial #2000 $finish; endmodule4位阻塞module reg4_bpa(qout,clk,reset,din); output [3:0] qout;input clk,reset;input din;reg [3:0] qout;always @(posedge clk or posedge reset)if (reset)qout=4’b0000;elsebeginqout[0]=din;qout[1]=qout[0];qout[2]=qout[1];qout[3]=qout[2];endendmodule 四选一信号module mu14_1a(y,s,x);output y;input [1:0]s;input[3:0]x;reg y;always @(s or x)begincase (s)2’b00: y=x[0];2’b01: y=x[1];2’b10: y=x[2];2’b11: y=x[3];default: y=1’b0;endcaseend8位加法器module adder4b(a4,b4,c4,s4,co4); input [3:0] a4,b4;input c4;output [3:0] s4;output co4;assign {co4,s4}=a4+b4+c4; endmodulemoduie adder8b(a8,b8,c8,s8,co8); input [7:0] a8,b8;input c8;output [7:0] s8;output co8;wire sc;adder4b u1(.a4(a8[3:0]),.b4(b8[3:0]), .c4(c8),.s4(s8[3:0]),.co4(sc));adder4b u2(.a4(a8[7:4]),.b4(b8[7:4]),.c4(sc),.s4(s8[7:4]),.co4(co8)); endmodule32位锁存器module reg32b(load,dim,dout);input load;input[31:0]din;output[31:0];wire load;wire[31:0] din;reg [3:0] dout;always @(posedge load)begindout=din;endendmodule20分频器module jydiv(clk_in,reset,clk_out);input clk_in,reset;output clk_out;reg [4:0] cnt;reg clk_out;parameter divide_period+20;always @(posedge clk_in or posedge reset) beginif (reset)begincnt<=0;clk_out<=1’b0;endelse If(cnt<(divide_period/2))beginclk_out<=1’b0;cnt<=cnt+1;endelse if (cnt,(divide_period_1))beginclk_out<=1’b0;cnt<=cnt+1;endelsecnt<=1’b0;endendmodule 测频控制信号发生器module testctl(clk,tsten,clr_cnt,load);input clk;output tsten,clr_cnt,load;reg div2clk,clr_cnt;always @(posedge clk)begindiv2clk<=~div2clk;endassign load=~div2clk;assign tsten=div2clk;always @(clk or div2clk)beginif(~div2clk)if(~clk) clr_cnt<=1;else clr_cnt<=0;elseclr_cnt<=0;endendmodule。