当前位置:文档之家› Verilog复习重点

Verilog复习重点

Verilog复习重点
Verilog复习重点

//D 触发器

module D_FF (d, clk,clr,q,qb);

output q, qb;

input d,clk,clr;

reg q, qb; //输出端口q, qb值保存always @(posedge clk)

begin

if (clr)

q<=1’b0;

else

q<=d;

end

Assign qb=~q;

endmodule

module FA_Str (A, B, Cin, Sum, Cout);

input A, B, Cin;

output Sum, Cout;

wire S1, T1, T2, T3;

xor X1 (S1, A, B);

xor X2 (Sum, S1, Cin);

and A1 (T3, A, B);

and A2 (T2, B, Cin);

and A3 (T1, A, Cin);

or O1 (Cout, T1, T2, T3);

Endmodule

module FourBitFA (FA, FB, FCin, FSum, FCout );

input [3:0] FA, FB;

output [3:0] FSum

input FCin;

input FCout;

wire [ 1: 3] FTemp;

FA_Str

FA1( .A(FA[1]), .B(FB[1]), .Cin(FCin),.Sum(FSum [1]), .Cout(FTemp[1]));

FA_Str FA2( .A(FA[2]), .B(FB[2]), .Cin(FTemp[1]),.Sum( FSum[2]), .Cout(FTemp[2]));

FA_Str FA3(FA[3], FB[3], FTemp[2], FSum[3], FTemp[3]);

FA_Str FA4(FA[4], FB[4], FTemp[3], FSum[4], FCout);

endmodule

1用阻塞方式设计一个2选1的多路选择器1 module mux21(ina,inb,sel,out);

input ina,inb;

input sel;

output out;

reg out;

//assign out= sel?ina;inb;

always@(sel or ina or inb)

case(sel)

1'b1:out=ina;

default:out=inb;

endcase

/*if(sel)

out=ina;

else

out=inb;*/

endmodule

2 设计一个8位全加器

2module adder8(ina,inb,ci,sum,co);

input[7:0] ina,inb;

input ci;

output[7:0]sum;

output co;

reg[7:0]sum;

assign {co,sum}=ina+inb+ci;

endmodule

同步复位的4位计数器

3 module count4(clk,nrst,out);

input clk,nrst;

output[4:0] out;

reg[4:0] out;

always@(posedge clk)

if(!nrst)

out<=4'b0;

else

out<=out+4'b1;

endmodule

设计一个8-3优先编码器

5 module encoder83(in,outcode);

output[2:0] outcode;

input [7:0] in;

reg[2:0] outcode;

function[2:0] code;

input[7:0] ina;

if(ina[0]) code=3'b000;

else if(ina[1]) code=3'b001;

else if(ina[2]) code=3'b010;

else if(ina[3]) code=3'b011;

else if(ina[4]) code=3'b100;

else if(ina[5]) code=3'b101;

else if(ina[6]) code=3'b110;

else if(ina[7]) code=3'b111;

else code=3'bx;

endfunction

assign outcode=code(in);

endmodule

6.设计八功能的算术运算单元(ALU),其输入信号a和b均为4位,功能选择信号select 为3位.输出信号out为8位。算术运算单元alu所执行的操作与select信号有关,具体关系见下表。

6 module alu(a,b,sel,out);

input a,b;

input[3:0]sel;

output[3:0] out;

reg[3:0]out;

always@(sel or a or b )

case(sel)

3'b000:out=a;

3'b001:out=a+b;

3'b010:out=a-b;

3'b011:out=a*b;

3'b100:out=(a>b)?a:b;/*if(a>b)out=a;else out=b;*/

3'b101:out=(a

3'b110:out=a<<3;

3'b111:out=a>>3;

default: out=4'bx;

endcase

Endmodule 全加器设计

module sub(x,y,sub_in,diff,sub_out); input x,y,sub_in;

output diff,sub_out;

//reg w1;

wire x1,w1,w2,w3,w4,w5;

xor (w1,y,sub_in);

xor (diff,w1,x);

not (x1,x);

and (w3,x1,y);

and (w4,y,sub_in);

and (w5,x1,sub_in);

or (sub_out,w3,w4,w5);

endmodule

/*always@(*)

begin

diff=x^y^sub_in;

w1=(x^sub_in)|(y&sub_in);

sub_out=x&w1;

end

assign {diff,sub_out}=x-y-sub_in; endmodule*/

//4位脉动进位计数器的设计module ripple_carry_counter(q,clk,rst); input clk,rst;

output[3:0] q;

tff t0(q[0],clk,rst);

tff

t1(q[1],clk,rst);

tff t2 (q[2],clk,rst); tff t3(q[3],clk,rst);

endmodule module tff(q,clk,rst); input clk,rst; output q;

wire d;

dff d1(q,d,clk,rst); not n1(d,q);

endmodule

module dff(q,d,clk,rst);

input d,clk,rst;

output q;

reg q;

always@(negedge clk or posedge rst)

if(rst)

q<=0;

else

q<=d;

endmodule

JK触发器

module JK_FF(CLK,J,K,Q,RS,SET);

input CLK,J,K,SET,RS;

output Q;

reg Q;

always @(posedge CLK or negedge RS or negedge SET)

begin

if(!RS) Q <= 1'b0;

else if(!SET) Q <= 1'b1;

else

case({J,K})

2'b00 : Q <= Q;

2'b01 : Q <= 1'b0;

2'b10 : Q <= 1'b1;

2'b11 : Q <= ~Q;

default: Q<= 1'bx;

endcase

end

endmodule module HelloVlog ( Clock, Reset_n, A_in, B_in, Sel_in, A_xor_out, B_xor_out );

input Clock;

input Reset_n;

input [1:0] A_in;

input [1:0] B_in;

input Sel_in;

output A_xor_out;

output B_xor_out;

wire A_xor_wire;

wire B_xor_wire;

wire [1:0] result;

reg eq0, eq1, eq2, eq3;

reg A_xor_out;

reg B_xor_out;

mux2_1 mux2(result,A_in,B_in,Sel_in); decode2_4 decode2(eq0,eq1,eq2,eq3,result); xor xor_A( A_xor_wire,eq0,eq1);

xor xor_B( B_xor_wire,eq0,eq1);

dff

dff_A(A_xor_out,A_xor_wire,Reset_n,clock); dff

dff_B(B_xor_out,B_xor_wire,Reset_n,clock); endmodule

四位并行比较器

module compare (A, B, AeqB, AgtB, AltB);

input [3:0] A, B;

output reg AeqB, AgtB, AltB;

always @(A, B)

begin

AeqB = 0;

AgtB = 0;

AltB = 0;

if(A == B)

AeqB = 1;

else if (A > B)

AgtB = 1;

else

AltB = 1;

end

endmodule

3 用结构级建模方法,描述一个4位全加器,并编写测试代码进行验证

module add4(a,b,cin,sum,cout);

input a,b,cin;

output sum,cout;

wire s1,m1,m2,m3;

and (m1,a,b),

xor (s1,a,b),

xor (sum,s1,cin);

and (m2,s1,cin);

or (cout,m1,m2);

endmodule

`include "full_add1.v"

module add4_1(sum,cout,a,b,cin);

output[3:0] sum;

output cout;

input[3:0] a,b;

input cin;

full_add1 f0(a[0],b[0],cin,sum[0],cin1); //级连描述

full_add1 f1(a[1],b[1],cin1,sum[1],cin2);

full_add1 f2(a[2],b[2],cin2,sum[2],cin3);

full_add1 f3(a[3],b[3],cin3,sum[3],cout); endmodule

8位补码平方器

module squ1 (data_in,square);

input [7:0] data_in; //输入是补码output [15:0] square;

wire [7:0] data_bar;

assign data_bar = ~data_in + 1;

assign square=(data_in[7])? (data_bar*data_bar) : (data_in*data_in); endmodule

4位串转并

module ser_to_par_8bit(ser_in,clk,rst,out);

input ser_in,clk,rst;

output [7:0] out;

wire [7:0] out;

reg [7:0] par_out;

wire [2:0] count;

counter_mod_8

f1(.clock(clk),.reset(rst),.Q(count));

always@(posedge clk or negedge rst) begin

if(~rst)

par_out <= 8'b0000_0000;

else begin

par_out <= {par_out[6:0],ser_in};

end

end

assign out = (count == 7)? par_out : 8'b0000_0000;

endmodule

4位并转串

module

para_to_seria(para_in,clock,reset,ser_out); input [7:0] para_in;

input reset,clock;

output ser_out;

wire ser_out;

reg ser_out_buf;

reg [7:0] data;

assign ser_out=reset?ser_out_buf:1'bz; always@(posedge clock or negedge reset)

begin

if(~reset) begin

ser_out_buf <= 1'b0;

data <= para_in;

end

else begin

data <= {data[6:0],data[7]};

ser_out_buf <= data[7];

end

end

endmodule

任务举例

module sort4(ra,rb,rc,rd,a,b,c,d);

output[3:0] ra,rb,rc,rd;

input[3:0] a,b,c,d;

reg[3:0] ra,rb,rc,rd;

reg[3:0] va,vb,vc,vd;

always @ (a or b or c or d)

begin

{va,vb,vc,vd}={a,b,c,d};

sort2(va,vc); //va 与vc互换。

sort2(vb,vd); //vb 与vd互换。

sort2(va,vb); //va 与vb互换。

sort2(vc,vd); //vc 与vd互换。

sort2(vb,vc); //vb 与vc互换。

{ra,rb,rc,rd}={va,vb,vc,vd};

end

task sort2;

inout[3:0] x,y;

reg[3:0] tmp;

if(x>y)

begin

tmp=x; //x与y变量的内容互换,要求顺序执行,所以采用阻塞赋值方式。

x=y;

y=tmp;

end

endtask

endmodule

状态机3分频

module clk_3div (clk,reset,clk_out);

input clk, reset;

output clk_out;

reg[1:0] state;

reg clk1;

always @(posedge clk or negedge reset)

if(!reset)

state<=2'b00;

else

case(state)

2'b00:state<=2'b01;

2'b01:state<=2'b11;

2'b11:state<=2'b00;

default:state<=2'b00;

endcase

always @(negedge clk or negedge reset) if(!reset)

clk1<=1'b0;

else

clk1<=state[0];

assign clk_out=state[0]&clk1; endmodule

测试代码

timescale 1ns/1ps

module clk_3div_tb;

reg clk;

reg rst_;

wire clk_3div;

initial

begin

rst_ = 0;

clk = 0;

# 10;

rst_ = 1;

# 1000;

$stop;

end

clk_3div clk_3div_u1 (.clk(clk),

.reset(rst_),

.clk_out(clk_3div)); always # 10 clk = ~clk;

endmodule

FPGA学习心得

回想起自己学FPGA,已经有一段时间了,从开始的茫然,到后来的疯狂看书,设计开发板,调电路,练习各种FPGA实例,到最后能独立完成项目,一路走来,感受颇多,拿出来和大家分享,顺便介绍下自己的一点经验所得,希望对初学者有所帮助。 废话不说了,下面进入正题,学习FPGA我主要经历了这么几个阶段: ①、Verilog语言的学习,熟悉Verilog语言的各种语法。 ②、FPGA的学习,熟悉QuartusII软件的各种功能,各种逻辑算法设计,接口模块(RS232,LCD,VGA,SPI,I2c等)的设计,时序分析,硬件优化等,自己开始设计简单的FPGA 板子。 ③、NiosII的学习,熟悉NiosII的开发流程,熟悉开发软件(SOPC,NiosII IDE),了解NiosII 的基本结构,设计NiosII开发板,编写NiosII C语言程序,调试板子各模块功能。先来说说第一个阶段,现在主要的硬件描述语言有VHDL,Verilog两种,在本科时老师一般教VHDL,不过现在 Verilog用的人越来越多,其更容易上手(与C语言语法比较类似),也更灵活,现在的IC设计基本都用Verilog。像systemC,systemVerilog之类的应该还在萌芽阶段,以后可能会有较大发展。鉴于以上原因我选择了Verilog作为我学习的硬件描述语言。 其实有C语言的基础,学起Verilog的语言很简单,关键要有并行的概念,所有的module,assign,always都是并行的,这一点与软件语言有明显不同。这里推荐几本评价比较好的学习Verilog的书籍: ①、《verilog 数字系统设计教程》,这本书对于入门是一本很好的书,通俗易懂,让人很快上手,它里面的例子也不错。但本书对于资源优化方面的编程没有多少涉及到。 ②、《设计与验证Verilog HDL》,这本书虽然比较薄,但是相当精辟,讲解的也很深入,很多概念看了这本书有种豁然开朗的感觉,呵呵。 学习Verilog其实不用看很多书,基本的语法部分大家都一样,关键是要自己会灵活应用,多做练习。 Verilog语言学了一段时间,感觉自己可以编点东西,希望自己编的程序在板子上运行看看结果,下面就介绍我学习的第二个阶段。 刚开始我拿了实验室一块CPLD的开发板做练习,熟悉QuartusII的各种功能,比如IP的调用,各种约束设置,时序分析,Logiclock设计方法等,不过做到后面发现CPLD 的资源不太够(没有内嵌的RAM、不能用SignalTapII,LE太少等),而实验室没有FPGA开发板,所以就萌生了自己做FPGA开发板的意图,刚好Cadence我也学的差不多了,就花了几天时间主要研究了FPGA配置电路的设计,在板子上做了Jtag和AS下载口,在做了几个用户按键和LED,其他的口全部引出作为IO口,电路比较简单,板子焊好后一调就通了(心里那个爽啊...)。我选的FPGA是cycloneII系列的EP2C5,资源比以前的FPGA多了好几倍,还有PLL,内嵌的RAM,可以试试SignalTapII,用内嵌的逻辑分析仪测试引脚波形,对于FPGA的调试,逻辑分析仪是至关重要的。利用这块板子我完成了项目中的几个主要功能:RS232通信,指令译码,配置DDS,AD数据高速缓存,电子开关状态设置等,在实践中学习起来真的比平时快很多,用到什么学什么动力更大。这个时候我主要看的数据有这几本感觉比较好: ①、《Altera FPGA/CPLD 设计(基础篇)》:讲解一些基本的FPGA设计技术,以及QuartusII中各个工具的用法(IP,RTL,SignalProbe,SignalTapII,Timing Closure Floorplan,chip Editor等),对于入门非常好。 ②、《Altera FPGA/CPLD 设计(高级篇)》:讲解了一些高级工具的应用,LogicLock,时序约束很分析,设计优化,也讲述了一些硬件编程的思想,作为提高用。

数字系统设计与verilog HDL课程设计

数字系统设计与verilog HDL课程设计 设计题目:实用多功能数字钟 专业:电子信息科学与技术 班级:0313410 学号:031341025 姓名:杨存智 指导老师:黄双林

摘要 本课程设计利用QuartusII软件Verilog VHDL语言的基本运用设计一个多功能数字钟,经分析采用模块化设计方法,分别是顶层模块、alarm、alarm_time、counter_time、clk50mto1、led、switch、bitel、adder、sound_ddd、sound_ddd_du模块,再进行试验设计和软件仿真调试,分别实现时分秒计时、闹钟闹铃、时分秒手动校时、时分秒清零,时间保持和整点报时等多种基本功能。 单个模块调试达到预期目标,再将整体模块进行试验设计和软件仿真调试,已完全达到分块模式设计功能,并达到设计目标要求。 关键字:多功能数字钟、Verilog、模块、调试、仿真、功能

目录 1.课程设计的目的及任务............................................................. 错误!未定义书签。 1.1 课程设计的目的 (3) 1.2 课程设计的任务与要求 (4) 2.课程设计思路及其原理 (4) 3.QuartusII软件的应用 (5) 3.1工程建立及存盘 (5) 3.2工程项目的编译 (5) 3.3时序仿真 (6) 4.分模块设计、调试、仿真与结果分析 (7) 4.1 clk50mto1时钟分频模块 (7) 4.2 adder加法器模块 (7) 4.3 hexcounter16 进制计数器模块 (7) 4.4 counter_time 计时模块 (8) 4.5 alarm闹铃模块 (8) 4.6 sound_ddd嘀嘀嘀闹铃声模块 (9) 4.7 sound_ddd_du嘀嘀嘀—嘟声音模块 (9) 4.8 alarm_time闹钟时间设定模块 (10) 4.9 bitsel将输出解码成时分秒选择模块 (10) 4.10 switch去抖模块 (11) 4.11 led译码显示模块 (11) 4.12 clock顶层模块 (12) 5.实验总结 (13) 5.1调试中遇到的问题及解决的方法 (13) 5.2实验中积累的经验 (14) 5.3心得体会 (14) 6.参考文献 (14) 1.1 课程设计的目的 通过课程设计的锻炼,要求学生掌握V erilog HDL语言的一般设计方法,掌握VerilogHDL语言的基本运用,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,基于实践、源于实践,实践出真知,实践检验真理,培养学生的

Verilog设计练习十例及答案

设计练习进阶 前言: 在前面九章学习的基础上,通过本章的练习,一定能逐步掌握Verilog HDL设计的要点。我们可以先理解样板模块中每一条语句的作用,然后对样板模块进行综合前和综合后仿真,再独立完成每一阶段规定的练习。当十个阶段的练习做完后,便可以开始设计一些简单的逻辑电路和系统。很快我们就能过渡到设计相当复杂的数字逻辑系统。当然,复杂的数字逻辑系统的设计和验证,不但需要系统结构的知识和经验的积累,还需要了解更多的语法现象和掌握高级的Verilog HDL系统任务,以及与C语言模块接口的方法(即PLI),这些已超出的本书的范围。有兴趣的同学可以阅读Verilog语法参考资料和有关文献,自己学习,我们将在下一本书中介绍Verilog较高级的用法。 练习一.简单的组合逻辑设计 目的: 掌握基本组合逻辑电路的实现方法。 这是一个可综合的数据比较器,很容易看出它的功能是比较数据a与数据b,如果两个数据相同,则给出结果1,否则给出结果0。在Verilog HDL中,描述组合逻辑时常使用assign 结构。注意equal=(a==b)1:0,这是一种在组合逻辑实现分支判断时常使用的格式。 模块源代码: " qual(equal),.a(a),.b(b)); 简单时序逻辑电路的设计 目的:掌握基本时序逻辑电路的实现。

在Verilog HDL中,相对于组合逻辑电路,时序逻辑电路也有规定的表述方式。在可综合的Verilog HDL模型,我们通常使用always块和@(posedge clk)或@(negedge clk)的结构来表述时序逻辑。下面是一个1/2分频器的可综合模型。 eset(reset),.clk_in(clk),.clk_out(clk_out)); endmodule 仿真波形: 练习:依然作clk_in的二分频clk_out,要求输出与上例的输出正好反相。编写测试模块,给出仿真波形。 练习三. 利用条件语句实现较复杂的时序逻辑电路 目的:掌握条件语句在Verilog HDL中的使用。 与常用的高级程序语言一样,为了描述较为复杂的时序关系,Verilog HDL提供了条件语句供分支判断时使用。在可综合风格的Verilog HDL模型中常用的条件语句有if…else和case…endcase两种结构,用法和C程序语言中类似。两者相较,if…else用于不很复杂的分支关系,实际编写可综合风格的模块、特别是用状态机构成的模块时,更常用的是case…endcase 风格的代码。这一节我们给的是有关if…else的范例,有关case…endcase结构的代码已后会经常用到。 下面给出的范例也是一个可综合风格的分频器,是将10M的时钟分频为500K的时钟。

计算机组成原理名词解释

主机:CPU、存储器和输入输出接口合起来构成计算机的主机。 CPU:中央处理器,是计算机的核心部件,由运算器和控制器构成。 运算器:计算机中完成运算功能的部件,则ALU 和寄存器构成。 外围设备:计算机的输入输出设备,包括输入设备、输出设备和外存储设备。 数据:编码形式的各种信息,在计算机中作为程序的操作对象。 指令:构成计算机软件的基本元素,表示成二进制数编码的操作命令。 透明:在计算机中,从某个角度看不到的特性称该特性是透明的。 位:计算机中的一个二进制的数据代码(0或1),是数据的最小表示单位。 字:数据运算和存储单位,其位数取决于计算机。 字节:衡量数据量以及存储器容量的基本单位,1字节等于8位二进制信息。 字长:一个数据字包含的位数,一般为8位、16位、32位和64位等。 地址:给主存储器不同的存储位置指定的一个二进制编号。 存储器:计算机中存储程序和数据的部件,分为内存和外存两种。 存储器的访问:对存储器中数据的读操作和写操作。 总线:计算机中连接功能单元的公共线路,是一束信号线的集合。硬件:由物理元器件构成的系统,计算机硬件是一个能够执行指令的设备。 软件:由程序构成的系统,分为系统软件和应用软件两种。 兼容:计算机部件的通用性。 操作系统:主要的系统软件,控制其他程序的运行,管理系统资源并且为用户提供操作界面。 汇编程序:将汇编语言程序翻译成机器语言程序的计算机软件。 汇编语言:采用文字方式(助记符)表示的程序设计语言,其中大部分指令和机器语言中的指令一一对应。 编译程序:将高级语言的程序转换成机器语言程序的计算机软件。 解释程序:解释执行高级语言程序的计算机软件,,解释并执行源程序的语句。 系统软件:计算机系统的一部分,进行命令解释、操作管理、系统维护、网络通信、软件开发和输入输出管理的软件。 应用软件:完成应用功能的软件,专门为解决某个应用领域中的具体任务而编写。 指令流:在计算机的存储器与CPU之间形成的不断传递的指令序列。 数据流:在计算机的存储器与CPU之间形成的不断传递的数据序列。 接口:部件之间的连接电路,如输入输出接是主机与外围设备之间传递数据与控制信息的电路。 存储器的容量:是衡量存储器容纳信息能力的指标。主存储器中数据的存储一般是以字为单位进行。存储器中存储的一个字的信息如果是数据则称为数据字,如果是指令则称为指令字。

VerilogHDL经典程序非常适合新手

一、2线-4线译码器 module counter4(q1,q0,ncr,cp); input cp,ncr; output q1,q0; reg q1,q0; always@(posedge cp or negedge ncr) begin if(~ncr){q1,q0}<=2'b00; else{q1,q0}<={q1,q0}+1'b1; end endmodule 二、4选1数据选择器 module selector4_1(i0,i1,i2,i3,a1,a0,y); input i0,i1,i2,i3,a1,a0; output y; reg y; always@(a1or a0) begin case({a1,a0}) 2'b00:y=i0; 2'b01:y=i1; 2'b10:y=i2; 2'b11:y=i3; default:y=0; 一、2线-4线译码器 module counter4(q1,q0,ncr,cp); input cp,ncr; output q1,q0; reg q1,q0; always@(posedge cp or negedge ncr) begin if(~ncr){q1,q0}<=2'b00; else{q1,q0}<={q1,q0}+1'b1; end endmodule 二、4选1数据选择器 module selector4_1(i0,i1,i2,i3,a1,a0,y); input i0,i1,i2,i3,a1,a0; output y; reg y; always@(a1or a0) begin case({a1,a0}) 2'b00:y=i0;

verilog综合心得

综合:不可综合的运算符:= = = ,!= =,/(除法),%(取余数)。 1、不使用初始化语句。 2、不使用带有延时的描述。 3、不使用循环次数不确定的循环语句,如:forever、while等。 4、尽量采用同步方式设计电路。 5、除非是关键路径的设计,一般不调用门级元件来描述设计的方法,建议采用行为语句来完成设计。 6、用always过程块描述组合逻辑,应在信号敏感列表中列出所有的输入信号。 7、所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。 8、在verilog模块中,任务(task)通常被综合成组合逻辑的形式,每个函数(function)在调用时通常也被综合为一个独立的组合电路模块。 9、用户自定义原语(UDP)是不可综合的,它只能用来建立门级元件的仿真模型。 一般综合工具支持的V erilog HDL结构

移位运算符:V erilog HDL提供向右(>>)及向左(<<)两种运算符,运算符高位或地位一旦移出即予丢弃,其空缺的位则予以补零。 连续赋值语句(assign)、case语句、if…else语句都是可以综合的 initial 语句内若包含有多个语句时,必须以begin end 作聚合;单一的初值赋值,因此并不需以begin end做聚合。 循环(Loops)并不能单独地在程序中存在,而必须在initial和always块中才能使用。initial过程块中的语句仅执行一次,而always块中的语句是不断重复执行的。 编写顶层模块的注意事项 每个端口除了要声明是输入、输出还是双向外,还要声明其数据类型,是连线型(wire)还是寄存器型(reg),如果没有声明则综合器默认为wire型。 1、输入和双向端口不能声明为寄存器型。 2、在测试模块中不需要定义端口。 编写testbentch所归纳的心得

《计算机组成原理》名词解释

摩尔定律:对集成电路上可容纳的晶体管数目、性能和价格等发展趋势的预测,其主要内容是:成集电路上可容纳的晶体管数量每18个月翻一番,性能将提高一倍,而其价格将降低一半。 主存: 计算机中存放正在运行的程序和数据的存储器,为计算机的主要工作存储器,可随机存取。 控制器:计算机的指挥中心,它使计算机各部件自动协调地工作。 时钟周期:时钟周期是时钟频率的倒数,也称为节拍周期或T周期,是处理操作最基本的时间单位。 多核处理器:多核处理器是指在一枚处理器中集成两个或多个完整的计算引擎(内核)。 字长:运算器一次运算处理的二进制位数。 存储容量: 存储器中可存二进制信息的总量。 CPI:指执行每条指令所需要的平均时钟周期数。 MIPS:用每秒钟执行完成的指令数量作为衡量计算机性能的一个指标,该指标以每秒钟完成的百万指令数作为单位。 CPU时间:计算某个任务时CPU实际消耗的时间,也即CPU真正花费在某程序上的时间。 计算机系统的层次结构:计算机系统的层次结构由多级构成,一般分成5级,由低到高分别是:微程序设计级,机器语言级,操作系统级,汇编语言级,高级语言级。 基准测试程序:把应用程序中使用频度最高的那那些核心程序作为评价计算机性能的标准程序。 软/硬件功能的等价性:从逻辑功能的角度来看,硬件和软件在完成某项功能上是相同的,称为软/硬件功能是等价的,如浮点运算既可以由软件实现,也可以由专门的硬件实现。固件:是一种软件的固化,其目的是为了加快软件的执行速度。 可靠性:可靠性是指系统或产品在规定的条件和规定的时间内,完成规定功能的能力。产品可靠性定义的要素是三个“规定”:“规定条件”、“规定时间”和“规定功能”。MTTF:平均无故障时间,指系统自使用以来到第一次出故障的时间间隔的期望值。MTTR:系统的平均修复时间。 MTBF:平均故障间隔时间,指相邻两次故障之间的平均工作时间。 可用性:指系统在任意时刻可使用的概率,可根据MTTF、MTTR和MTBF等指标计算处系统的可用性。

Ncverilog_的一些经验

Ncverilog 的一些经验 1.Verilog和Ncverilog命令使用库文件或库目录 ex). ncverilog -f run.f -v lib/lib.v -y lib2 +libext+.v //一般编译文件在run.f中, 库文件在lib.v中,lib2目录中的.v文件系统自动搜索使用库文件或库目录,只编译需要的模块而不必全部编译 2.Verilog Testbench信号记录的系统任务: 1). SHM数据库可以记录在设计仿真过程中信号的变化. 它只在probes有效的时间内记录你set probe on的信号的变化. ex). $shm_open("waves.shm"); //打开波形数据库 $shm_probe(top, "AS"); // set probe on "top", 第二个参数: A -- signals of the specific sc rope S -- Ports of the specified s cope and below, excluding library cells C -- Ports of the specified s cope and below, including library cells AS -- Signals of the specifie d scope and below, excluding library cells AC -- Signals of the specifie d scope and below, including library cells 还有一个 M ,表示当前scope的m emories, 可以跟上面的结合使用, "AM" "AMS" "AMC" 什么都不加表示当前scope的por ts; $shm_close //关闭数据库 2). VCD数据库也可以记录在设计仿真过程中信号的变化. 它只记录你选择的信号的变化. ex). $dumpfile("filename"); //打开数据库 $dumpvars(1, top.u1); //scope = top.u1, depth = 1 第一个参数表示深度, 为0时记录所有深度; 第二个参数表示scope,省略时表当前的scope. $dumpvars; //depth = all scope = all $dumpvars(0); //depth = all scope = current $dumpvars(1, top.u1); //depth = 1 scope = top. u1 $dumpoff //暂停记录数据改变,信号变化不写入库文件中 $dumpon //重新恢复记录 3). Debussy fsdb数据库也可以记录信号的变化,它的优势是可以跟debus sy结合,方便调试.

《计算机组成原理》复习参考答案

福建师范大学网络教育学院 《计算机组成原理》复习资料 一、单项选择题 1、现代计算机的运算器一般通过总线结构来组织,在下面的总线结构运算器中,单总线结构的操作速度最慢,而(B)的操作速度最快。 A.双总线结构B.多总线结构 C.单总线结构D.三总线结构 2、微型计算机的分类通常以微处理器的(D)来划分。 A.芯片名B.寄存器数目 C.字长D.规格 3、将有关数据加以分类、统计、分析,以取得有价值的信息,我们称其为(A)。 A.数据处理B.辅助设计 C.实时控制D.数值计算 4、虚拟存储器是建立在多层次存储结构上,用来解决(C)的问题。A.存储B.外存 C.主存容量不足D.外存容量不足 5、微程序放在(B)中。 A.RAMB.控制存储器 C.指令寄存器D.内存储器 6、冯.诺依曼机工作方式的基本特点是(A) A.按地址访问并顺序执行指令B.堆栈操作 C.选择存储器地址D.按寄存器方式工作 7、D/A转换器是(D) A.把计算机输出的模拟量转为数字量 B.把模拟量转为数字量,把数字量输入到计算机 C.把数字量转为模拟量,把转化结果输入到计算机 D’把计算机输出的数字量转为模拟量

8、浮点数的表示范围和精度取决于(A) A.阶码的位数和尾数的位数 B.阶码的位数和尾数采用的编码 C.阶码采用的编码和尾数采用的编码 D.阶码采用的编码和尾数的位数 9、ASCII码是对(A)进行编码的一种方案。 A.字符B.声音 C.图标D.汉字 10、ALU属于(A)部件。 A.运算器B.控制器 C.存储器D.寄存器 11、字长16位,用定点补码小数表示时,一个字所能表示的范围是(A)A.-1~(1-2-15)B.0~(1-2-15) C.-1~+1D.-(1-2-15)~(1-2-15) 12、微程序入口地址是(B)根据指令的操作码产生的。 A.计数器B.译码器 C.计时器D.判断逻辑矩阵 13、计算机中表示地址时使用(D) A.原码B.补码 C.反码D.无符号数 二、改错题(针对各小题的题意,改正其结论中错误或补充其不足。) 1、程序计数器PC用来指示从外存中取指令。 错。程序计数器PC用来指示现行指令的地址。 2、加法器是构成运算器的基本部件,为提高运算速度,运算器一般采用串 行加法器。 错。加法器是构成运算器的基本部件,为提高运算速度,运算器一般采用并行加法器。 3、为了保证中断服务程序执行完毕以后,能正确返回到被中断的断点继续 执行程序,不用进行现场保护操作。

Verilog语言基础知识

Verilog HDL语言基础知识 先来看两个Verilog HDL程序。 例一个8位全加器的Verilog HDL源代码 module adder8(cout,sum,ina,inb,cin); output[7:0] sum; output cout; input[7:0] ina,inb; input cin; @ assign {cout,sum}=ina+inb+cin; 模块的端口声明了模块的输人和输出口。其格式如下: module 模块名(口1,口2,口3,口4,……); 2.模块内容 模块内容包括I/O说明,信号类型声明和功能定义。 (1) I/O说明的格式如下: ; 输人口: input端口名1,端口名2,……端口名N; 输出口: output端口名l,端口名2,……端口名N; I/O说明也可以写在端口声明语句里。其格式如下: module module_name(input portl,input port2,…output portl,output port2,…); (2)信号类型声明: 它是说明逻辑描述中所用信号的数据类型及函数声明。如 ( reg[7:0] out; 数字 (1)整数

在Verilog HDL中,整数型常量(即整常数)有以下4种进制表示形式: ◇二进制整数(b或B); ◇十进制整数(d或D); ◇十六进制整数(h或H); ◇八进制整数(o或O)。 ) 完整的数字表达式为: <位宽>'<进制> <数字>, 位宽为对应二迸制数的宽度,如: 8'b nets型变量wire nets型变量指输出始终根据输入的变化而更新其值的变量,它一般指的是硬件电路中的各种物理连接。Verilog HDL中提供了多种nets型变量,具体见表。 这里着重介绍wire型变量。wire是一种常用的nets型变量,wire型数据常用来表示assign语句赋值的组合逻辑信号。Verilog HDL模块中的输入/输出信号类型缺省时自动定义为wire型。Wire型信号可以用作任何方程式的输入,也可以用作assign语句和实例元件的输出,其取值为0,1,x,z。 wire型变量格式如下: & ⑴.定义宽度为1位的变量: wire 数据名1,数据名2,……数据名n; 例如:wire a,b; register型变量reg register型变量对应的是具有状态保持作用的电路元件,如触发器、寄存器等。register

verilog算法小结

verilog算法小结 2009-11-0923:20:45|分类:FPGA|字号大中小订阅 编程要点: 1、RTL中基本上不用for语句,它会被综合器展开为所有变量情况的执行语句,每个变量独立占用寄存器资源,造成资源浪费。 For语句大多数用在testbeach中。 能复用的的处理模块尽量复用,即使所有操作都不能复用,也要用case语句展开处理。 2、if—else if—else应该避免使用,因为它综合出来会产生“优先级”,消耗资源。 if—if、case是平行结构的,不产生“优先级”。 尽量使用case和if—if。 3、系统上复用模块节省的面积远比代码上优化来的实惠的多。 4、使用FPGA,还是CPLD: FPGA触发器资源丰富;——时序逻辑设计 CPLD组合逻辑资源丰富。——组合逻辑设计 5、只采用同步时序电路,不采用异步时序电路。 6、延时: 同步时序电路的延时最常用的设计方法是用分频或倍频的时钟或者同步计数器完成所需要的延时。 对于比较大的和特殊定时要求的延时,一般用高速时钟产生一个计算器; 对于比较小的延时,可以用一个D触发器打一下。 #n一般只用在testbeach,在电路综合时会被忽略,所以不用。

常用代码总结: D触发器: always@(posedge clk or negedge rst) if(rst==0) dout<=0; else dout<=din; 应用:1、由于是在clk上升沿才打入,所以可以消除din存在的毛刺。 2、延时 Gray码计数器: 000-001-011-010-110-100-101-111 module gray_cnt( //input clk, rst //output gray_cnt_out); input clk;

计算机组成原理名词解释问答

计算机系统:是一个由硬件和软件组成的复杂系统 硬件:指构成计算机的物理实体 软件:计算机程序、过程、规则及与这些程序、过程、规则有关的文档,以及从属于计算机系统运行的数据 存储程序:计算机的用途和硬件完全分离。硬件采用固定逻辑提供某些固定不变的功能。通过编制不同的过程来满足不同用户对计算机的应用需求 主机:将一系列硬件都安装在一个机箱内部的机架上,机箱及其上硬件被统称为主机 虚拟机:通过解释和翻译,使用户在使用计算机时仅看到软件界面而不必了解计算机内部的结构和工作原理 主存储器:主板上可以被处理器直接访问的存储器。断电或关机后其上的数据会消失 辅助存储器:在计算机系统断电或关机后不会令存储在其中的信息消失的存储介质 透明性:下一层机器的属性在上一层机器的程序员看来是透明的;计算机系统中客观上存在的事务或属性,从某个角度去看好像是不存在的 吞吐率:指计算机系统在单位时间内完成的任务数 响应时间:指用户在输入命令或数据后到得到第一个结果的时间间隔 软件兼容性:分为向上(下)兼容和向前(后)兼容。向上(下)兼容:为某档机器编制的软件,不加修改就可以正确运行在比它更高(低)档的机器上。向前(后)兼容:为某个时期投入市场的某种型号机器编制的软件,不加修改就可以正确运行在比它早(晚)投入市场的相同型号机器上 可伸缩性:指一个计算机系统能够在保持软件兼容性的同时,不仅可以通过向上扩展性能和功能,还能通过向下收缩来降低价格 C/S模式:客户机与服务器结构。网络上的计算机根据所担当角色不同被分为客户机或服务器。客户机提出请求,接受结果不做太多运算,服务器接受请求,进行处理并返回结果。计算机体系结构:程序员所看到的机器属性,即机器的概念性结构和功能特性 计算机组成:计算机结构的逻辑实现,一种计算机体系结构可由多种不同的计算机组成 计算机实现:计算机体系结构的物理实现,一种计算机组成可由多种不同的计算机实现,是计算机体系结构和组成的基础 主存:又称内存,是CPU能直接寻址的存储空间 辅存:又称外存,CPU不直接访问的存储器 相关联存储器:也称按内容访问的存储器,是通过存储内容的片段来访问的存储器 易失性:在电源关闭时不能保存数据的性质 随机访问的存储器:分静态RAM(SRAM)和动态RAM(DRAM)两种,周期均等 顺讯访问存储器:存储单元的访问周期随其地址的增大而增加的存储器 访问时间Ta:指从一个读(写)存储器开始到存储器发出完成信号的时间间隔 访问周期Ta:指从一个读(写)存储器操作开始到下一个存储器操作能够开始的最小时间间隔 双口RAM:是在一个SRAM存储器上具有两套完全独立的数据线,地址线和读写控制线,并允许两个独立的系统同时对该存储器进行随机性访问 存储器访问的局部性原理:对一小块聚集的指令或数据的访问只会持续一段时间。然后处理器的访存地址将转移到存储器的其他区域,但在转移到其他区域后又将对一小块相对聚集的程序或数据反复访问的现象 模N交叉存储器:多模块并采用交叉方式进行地址分配的存储器 Cache:高速缓存存储器,介于主存和处理器之间 存储器带宽:每秒传送的二进制位数

verilog语言的综合与不可综合

Verilog的综合与不可综合 综合说明编的代码可以对应出具体的电路,不可综合说明没有对应的电路结构。不可综合的代码编译通过,只能看到输出,不能实现电路,就是不能用来制作具体的芯片。 一、基本 Verilog中的变量有线网类型和寄存器类型。线网型变量综合成wire,而寄存器可能综合成WIRE,锁存器和触发器。 二:verilog语句结构到门级的映射 1、连续性赋值:assign 连续性赋值语句逻辑结构上就是将等式右边的驱动左边的结点。因些连续性赋值的目标结点总是综合成由组合逻辑驱动的结点。Assign语句中的延时综合时都将忽视。 2、过程性赋值: 过程性赋值只出现在always语句中。 阻塞赋值和非阻塞赋值就该赋值本身是没有区别的,只是对后面的语句有不同的影响。 建议设计组合逻辑电路时用阻塞赋值,设计时序电路时用非阻塞赋值。 过程性赋值的赋值对象有可能综合成wire,latch,和flip-flop,取决于具体状况。如,时钟控制下的非阻塞赋值综合成flip-flop。 过程性赋值语句中的任何延时在综合时都将忽略。 建议同一个变量单一地使用阻塞或者非阻塞赋值。 3、逻辑操作符: 逻辑操作符对应于硬件中已有的逻辑门 4、算术操作符: Verilog中将reg视为无符号数,而integer视为有符号数。因此,进行有符号操作时使用integer,使用无符号操作时使用reg。 5、进位: 通常会将进行运算操作的结果比原操作数扩展一位,用来存放进位或者借位。如: Wire [3:0] A,B; Wire [4:0] C; Assign C=A+B; C的最高位用来存放进位。 6、关系运算符: 关系运算符:<,>,<=,>= 和算术操作符一样,可以进行有符号和无符号运算,取决于数据类型是reg,net还是integer。

学习FPGA verilog的心得--编程技巧--如何写代码减少逻辑单元的使用数量

一....尽量不要使用"大于""小于"这样的判断语句,这样会明显增加使用的逻辑单元数量.看一下报告,资源使用差别很大. 例程:always@(posedge clk) begin count1=count1+1; if(count1==10000000) feng=1; //no_ring else if(count1==90000000) begin feng=0; //ring count1=0; end end //这么写会用107个逻辑单元 // 如果把这句话if(count1==10000000)改成大于小于,报告中用了135个逻辑单元二.....一定要想尽办法减少reg寄存器的长度 上次把[30:0]改到[50:0],报告里逻辑单元从100多直升到2000多!!!太吓人了,至于为什么我就不知道了哈! 三....case语句里一定要加default if一定要加else 如果是组合逻辑的设计,不加default或else的话,不能保证所有的情况都有赋值,就会在内部形成一个锁存器,不再是一个纯粹的组合逻辑了,电路性能就会下降.

例如:case({a,b}) 2'b11 e=b; 2'b10 e=a; endcase //不加default,虽然只关心a=1时的结果,但是a=0的时候,e就会保存原来的值,直到a变为1 //那么e要保存原来的值,就要在内部生成锁存器了. 四....尽量使用Case语句而不是if--else语句 复杂的if--else语句通常会生成优先级译码逻辑,这将会增加这些路径上的组合时延 用来产生复杂逻辑的Case语句通常会生成不会有太多时延的并行逻辑 五...组合逻辑的always块中,要注意所有的输入全部放入敏感变量表里 比如:always@(a or b) begin out=(a&b&c); end 此时生成的不是纯的组合逻辑,因为当C变化时, out不会立刻发生变化(需要等到a或b变化,c 的变化才会显现), 所以需要生成一个寄存器来保存C的值. 连续赋值语句的综合:从赋值语句右边提取出逻辑,用于驱动赋值语句左边的net

计算机组成原理名词解释

主机:CPU、存储器和输入输岀接口合起来构成计算机的主机。 CPU :中央处理器,是计算机的核心部件,由运算器和控制器构成。 运算器:计算机中完成运算功能的部件,则ALU 和寄存器构成。 外围设备:计算机的输入输岀设备,包括输入设备、输岀设备和外存储设备。 数据:编码形式的各种信息,在计算机中作为程序的操作对象。 指令:构成计算机软件的基本元素,表示成二进制数编码的操作命令。 透明:在计算机中,从某个角度看不到的特性称该特性是透明的。 位:计算机中的一个二进制的数据代码(0或1),是数据的最小表示单位。 字:数据运算和存储单位,其位数取决于计算机。 字节:衡量数据量以及存储器容量的基本单位,1字节等于8位二进制信息。 字长:一个数据字包含的位数,一般为8位、16位、32位和64位等。 地址:给主存储器不同的存储位置指定的一个二进制编号。 存储器:计算机中存储程序和数据的部件,分为内存和外存两种。 存储器的访问:对存储器中数据的读操作和写操作。 总线:计算机中连接功能单元的公共线路,是一束信号线的集合。 硬件:由物理元器件构成的系统,计算机硬件是一个能够执行指令的设备。 软件:由程序构成的系统,分为系统软件和应用软件两种。 兼容:计算机部件的通用性。 操作系统:主要的系统软件,控制其他程序的运行,管理系统资源并且为用户提供操作界面。 汇编程序:将汇编语言程序翻译成机器语言程序的计算机软件。 汇编语言:采用文字方式(助记符)表示的程序设计语言,其中大部分指令和机器语言中的指令一一对应。 编译程序:将高级语言的程序转换成机器语言程序的计算机软件。 解释程序:解释执行高级语言程序的计算机软件,解释并执行源程序的语句。 系统软件:计算机系统的一部分,进行命令解释、操作管理、系统维护、网络通信、软件开发和输入输出管理的软件。 应用软件:完成应用功能的软件,专门为解决某个应用领域中的具体任务而编写。 指令流:在计算机的存储器与CPU之间形成的不断传递的指令序列。 数据流:在计算机的存储器与CPU之间形成的不断传递的数据序列。 接口:部件之间的连接电路,如输入输岀接是主机与外围设备之间传递数据与控制信息的电路。 存储器的容量:是衡量存储器容纳信息能力的指 标。主存储器中数据的存储一般是以字为单位进行。存储器中存储的一个字的信息如果是数据则称为数据字,如果是指令则称为指令字。 原码:带符号数据表示方法之一,用一个符号位表

verilog语句可综合vs不可综合

1)所有综合工具都支持的结构: always,assign,begin,end,case,wire,tri,supply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter。 2)所有综合工具都不支持的结构: time,defparam,$finish,fork,join,initial,delays,UDP,wait。 3)有些工具支持有些工具不支持的结构: casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while。 建立可综合模型的原则 要保证Verilog HDL赋值语句的可综合性,在建模时应注意以下要点: 1)不使用initial。 2)不使用#10。 3)不使用循环次数不确定的循环语句,如forever、while等。 4)不使用用户自定义原语(UDP元件)。 5)尽量使用同步方式设计电路。 6)除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。 7)用always过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号。8)所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。 9)对时序逻辑描述和建模,应尽量使用非阻塞赋值方式。对组合逻辑描述和建模,既可以用阻塞赋值,也可以用非阻塞赋值。但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。 10)不能在一个以上的always过程块中对同一个变量赋值。而对同一个赋值对

Verilog HDL设计练习

Verilog HDL设计练习进阶(一) 练习一.简单的组合逻辑设计 目的:掌握基本组合逻辑电路的实现方法。 这是一个可综合的数据比较器,很容易看出它的功能是比较数据a与数据b,如果两个数据相同,则给出结果1,否则给出结果0。在Verilog HDL中,描述组合逻辑时常使用assign结构。注意equal=(a==b)?1:0,这是一种在组合逻辑实现分支判断时常使用的格式。 模块源代码: //--------------- compare.v ----------------- module compare(equal,a,b); input a,b; output equal; assign equal=(a==b)?1:0; //a等于b时,equal输出为1;a不等于b时, //equal输出为0。 endmodule 测试模块用于检测模块设计得正确与否,它给出模块的输入信号,观察模块的内部信号和输出信号,如果发现结果与预期的有所偏差,则要对设计模块进行修改。 测试模块源代码: `timescale 1ns/1ns //定义时间单位。 `include "./compare.v" //包含模块文件。在有的仿真调试环境中并不需要此语句。 //而需要从调试环境的菜单中键入有关模块文件的路径和名称module comparetest; reg a,b; wire equal; initial //initial常用于仿真时信号的给出。 begin a=0; b=0; #100 a=0; b=1; #100 a=1; b=1; #100 a=1; b=0; #100 $stop; //系统任务,暂停仿真以便观察仿真波形。 end compare compare1(.equal(equal),.a(a),.b(b)); //调用模块。 endmodule 仿真波形(部分):

计算机组成原理名词解释 (2)

精心整理 主机:CPU、存储器和输入输出接口合起来构成计算机的主机。 CPU:中央处理器,是计算机的核心部件,由运算器和控制器构成。 运算器:计算机中完成运算功能的部件,则ALU和寄存器构成。 外围设备:计算机的输入输出设备,包括输入设备、输出设备和外存储设备。 数据:编码形式的各种信息,在计算机中作为程序的操作对象。 指令:构成计算机软件的基本元素,表示成二进制数编码的操作命令。透明:在计算机中,从某个角度看不到的特性称该特性是透明的。 位:计算机中的一个二进制的数据代码(0或1),是数据的最小表示单位。 字:数据运算和存储单位,其位数取决于计算机。 字节:衡量数据量以及存储器容量的基本单位,1字节等于8位二进制信息。 字长:一个数据字包含的位数,一般为8位、16位、32位和64位等。 地址:给主存储器不同的存储位置指定的一个二进制编号。 存储器:计算机中存储程序和数据的部件,分为内

存和外存两种。 存储器的访问:对存储器中数据的读操作和写操作。 总线:计算机中连接功能单元的公共线路,是一束信号线的集合。 硬件:由物理元器件构成的系统,计算机硬件是一个能够执行指令的设备。 软件:由程序构成的系统,分为系统软件和应用软件两种。 兼容:计算机部件的通用性。 操作系统:主要的系统软件,控制其他程序的运行,管理系统资源并且为用户提供操作界面。汇编程序:将汇编语言程序翻译成机器语言程序的计算机软件。 汇编语言:采用文字方式(助记符)表示的程序设计语言,其中大部分指令和机器语言中的指令一一对应。 编译程序:将高级语言的程序转换成机器语言程序的计算机软件。 解释程序:解释执行高级语言程序的计算机软件,,解释并执行源程序的语句。 系统软件:计算机系统的一部分,进行命令解释、操作管理、系统维护、网络通信、软件开发和输入输出管理的软件。 应用软件:完成应用功能的软件,专门为解决某个应用领域中的具体任务而编写。

Verilog语言的特点

一、第一章 1.几个英文缩写: PLA(Programmable Logic Array)可编程逻辑阵列 FPGA(Field Programmable Gate Array)现场可编程逻辑门阵列 CPLD(Complex Programmable Logic Device)复杂可编程逻辑器件 CAD(Computer Aided Design) 计算机辅助设计 CAE(computer aided engineering) EDA(electronic design automation) 电子设计自动化 2.EDA定义:以计算机为工作平台,以EDA软件为开发环境,以PLD器件或者ASIC专用 集成电路为目标器件设计实现电路系统的一种技术。 3.现代EDA技术的特征【简答】 (1)采用硬件描述语言(HDL)进行设计 HDL语言更适合于描述规模大、功能复杂的数字系统,使设计者在比较抽象的层次上对所设计系统的结构和逻辑功能进行描述。 (2)逻辑综合与优化 目前EDA工具最高只能接受行为级和RTL级描述的HDL文件进行逻辑综合 (3)开放性和标准化 普遍采用标准化和开放性的框架结构,可以与其他的EDA工具一起进行设计工作,实现各种工具的优化组合,集成在一个易于管理的统一环境下,实现资源共享提高工作效率,利于大规模设计。 (4)更完备的库(Library) 在电路设计的各个阶段,EDA系统需要不同层次、不同种类的元器件模型库的支持。EDA 工具要具有更强大的设计能力和更高的设计效率,必须配有丰富的库。各种模型库的功能和规模是衡量EDA工具优劣的一个标志 4.基于EDA技术的设计思路(P4~P5) (1)Top-down设计,即自顶向下的设计 将设计分成几个不同的层次:系统级、功能级、门级、开关级, 按照自上而下的顺序,在不同的层次上对系统进行设计和仿真。 首先从系统设计入手,在顶层进行功能框图的划分和机构设计。 在功能级进行仿真纠错,并用HDL对高层次的系统行为进行描 述,然后用综合工具将设计转化为具体门电路网表。 Top-down的设计须经过“设计—验证—修改设计—再验证”的 过程,不断反复,直到结果能够实现所要求的功能,并在速度、 功耗、价格和可靠性方面实现较为合理的平衡。 (2)Bottom-up设计,即自底向上的设计 设计者选择标准集成电路,或者将各种基本单元做成基本单元库,调用这些基本单元,直到设计出满足需要的系统。缺点:效率低、易出错 5.IP核的一些概念(intellectual property) IP核(IP模块):指功能完整,性能指标可靠,已验证的、可重用的电路功能模块。分为硬核、固核、软核。 (1)软核:如ARM。是指在寄存器级或门级对电路功能用HDL描述,表现为用VHDL 等硬件描述语言描述的功能块,但是并不涉及用什么具体电路元件实现这些功能。 (2)硬核:以版图形式实现的设计模块,基于一定的设计工艺。供设计的最终阶段产品: 掩膜。

相关主题
文本预览
相关文档 最新文档