聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> 武汉理工大学华夏学院EDA复习题答案

武汉理工大学华夏学院EDA复习题答案

时间:2018-07-01 18:38:13    下载该word文档

1IEEE标准的硬件描述语言是Verilog HDLVHDL共同点是:能够形式化地抽象表示电路的行为和结构;支持逻辑设计中层次与范围的描述:可借用高级语言的精巧结构来简化电路行为的描述:具有电路仿真与验证机制以保证设计的正确性;支持电路描述由高层到低层的综合转换;硬件描述与实现工艺无关;便于文档管理;易于理解和设计重用。

不同点:Verilog HDL是一种非常容易掌握的硬件描述语言,而VHDL掌握起来就比较困难。

2、把功能经过验证的、可综合的、实现后电路结构总门数在5000门以上的Verilog HDL模型称之为“软核”。把在某一种现场可编程门阵列(FPGA)器件上实现的、经验证是正确的、总门数在5000门以上电路结构编码文件称为“固核”。把在某一种专用集成电路工艺的(ASIC)器件上实现的、经验证是正确的、总门数在5000门以上电路结构版图掩膜称为“硬核”。

3、什么叫综合?通过综合产生的是什么?通过综合工具把行为级描述的模块通过逻辑网表自动转化为门级形式的模块叫综合。综合由EDA工具来完成。产生的是由与门,或门和非门组成的加法器,比较器等组合逻辑。产生的模块很容易与某种工艺的基本元件逐一对应起来,再通过布局布线工具自动地转变为某种工具工艺的电路布线结构。

4、仿真可以在几层面上进行?每个层面的仿真有什么意义?

分别为:前仿真,逻辑网表仿真,门级仿真和布线后仿真。

前仿真,逻辑网表仿真,门级仿真:可以调试和验证逻辑系统的设计和结构准确与否,并发现问题及时修改。布线后仿真:分析设计的电路模块的运行是否正常。

5、模块由描述接口和描述逻辑功能两部分组成。

6、端口分为三种:输入口、输出口、输入/输出口。

7reg型和wire型变量的差别是什么?reg型变量是寄存器型变量,wire型变量是连线型变量。两者根本性的差别在于reg型变过量有个寄存器来存放变量,这个值只有变量发生改变时才会改变否则保证原来的值不变,wire型变量的值不是确定的值。

8、由连续赋值语句assign赋值的变量能否是reg类型的?可以是reg类型的变量。

9、在always模块中被赋值的变量能否是wire类型的?如果不能,那么必须是什么类型的?它们表示的一定是实际的寄存器吗?

不能。必须是reg类型的变量。他们表示的不一定是实际的寄存器。

10、参数类型的变量有什么用处?好处是可以提高程序的可读性和可维护性。

11、逻辑运算符与按位逻辑运算符有什么不同?用逻辑运算符时是两个操作数进行逻辑运算,而按位逻辑运算符运算时是两个操作数对应的每一位进行逻辑运算。逻辑运算符多用于条件的判断,按位逻辑运算符用于信号的运算和检测。

12、拼接符的作用是什么?为什么说合理地使用拼接符可以提高程序的可读性和可维护性?

拼接符的作用是把两个或多个信号的某些位拼接起来进行运算操作。因为借助拼接符可以用一个符号名来表示由多位信号组成的复杂信号。其物理意义是将多个信号结合成一个信号。

13、如果都不带时间延迟,阻塞和非阻塞赋值有什么不同?

阻塞和非阻塞赋值的区别在阻塞时顺序执行而非阻塞时并行执行。举例:

非阻塞赋值:always@(posedge clk) begin b<=a; c<=b; end

阻塞赋值:always@(posedge clk) begin b=a; c=b; end

两种不同的赋值方式结果是不同的。非阻塞赋值中两条语句同时执行,结果是b=ac=b。而阻塞赋值两条语句是逐条执行的,先执行b=a后执行c=b,结果是c=b=a

14、不断活动与不断执行有什么不同?

不断活动是always语句不断活动检查是否满足条件(如某个信号发生改变),不断执行时always语句引导的过程中的语句不断的执行着。

15、简单叙述任务和函数的不同点。

1)函数只能与主模块共用同一个仿真时间单元,而任务可以定义自己的仿真时间单位;

2)函数不能启动任务,而任务能启动其它任务和函数;

3)函数至少要有一个输入变量,而任务可以没有或有多个任何类型的变量;

4)函数返回一个值,而任务则不返回值。

16、什么是综合?是否任何符合语法的Verilog HDL程序都可以综合?

通过综合器把HDL程序转化成标准的门级结构网表。不是。

17有限状态机分为哪两类?有何区别?分为Moore型和Mealy两类Moore型其时序逻辑输出仅与当前状态有关;Mealy型其时序逻辑输出不但取决于状态还取决于输入。

18、什么是同步复位,什么是异步复位,两者的区别是什么?

同步复位只有在时钟沿到来时复位信号才起作用。异步复位只要有复位信号系统马上复位。同步复位的复位信号持续的时间应该超过一个时钟周期才能保证系统复位。异步复位抗干扰能力差,有些噪声也能使系统复位,因此有时候显得不够稳定,要想设计一个好的复位最好使用异步复位同步释放,而且复位信号低电平有效。

1、根据仿真测试文件绘制信号的波形

譬如:initial begin reset=1 clk=0 #3 reset=0 #5 reset=1 end always #2 clk=~clk;

4)程序填空题:

1、基本D触发器

module DFF(Q,D,CLK);

output Q;

input D,CLK;

reg Q;

always @(posedge CLK)

begin

Q <= D;

end

endmodule

28 位寄存器

module reg8(qout,in,clk,clear);

output[7:0] qout;

input[7:0] in;

input clk,clear;

reg[7:0] qout;

always @(posedge clk or posedge clear)

begin

if(clear) qout=0; //异步清 0

else qout=in;

end

endmodule

38 位并行加法器

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

output[7:0] sum;

output cout;

input[7:0] a,b;

input cin;

assign {cout,sum}=a+b+cin;

endmodule

48 位并行乘法器

module mult(outcome,a,b);

parameter size=8;

input[size:1] a,b; //两个操作数

output[2*size:1] outcome; //结果

assign outcome=a*b; //乘法运算符

endmodule

5、多路器

①持续赋值方式定义的2 1 多路选择器

module MUX21_1(out,a,b,sel);

input a,b,sel;

output out;

assign out=(sel==0)?a:b; //持续赋值,如果 sel 0,则out=a ;否则out=b

endmodule

②阻塞赋值方式定义的2 1 多路选择器

module MUX21_2(out,a,b,sel);

input a,b,sel;

output out;

reg out;

always@(a or b or sel)

begin

if(sel==0) out=a; //阻塞赋值

else out=b;

end

endmodule

module mux(out,a,b,sel)

output out;

input a,b,sel;

assign out=sel?a:b;

endmodule

④行为级描述的四选一多路选择器

module mux4_to_1(out,i0,i1,i2,i3,s1,s0);

input i0,i1,i2,i3,s1,s0;

output out;

reg out;

always @(s1 or s0 or i0 or i1 or i2 or i3)

begin

case({s1,s0})

2’b00:out=i0;

2’b01:out=i1;

2’b10:out=i2;

2’b11:out=i3;

default:out=1’bx;

endcase

end

endmodule

6、比较器

module compare_n(X,Y,XGY,XSY,XEY);

input [width-1:0] X,Y;

output XGY,XSY,XEY;

reg XGY,XSY,XEY;

parameter width=8;

always@(X or Y)

begin

if(X==Y)

XEY=1;

else XEY=0;

if(X>Y)

XGY=1;

else XGY=0;

if(X

XSY=1;

else XSY=0;

end

endmodule

module compare(equal,a,b);

Parameter size=1;

output equal;

input [size-1:0]a,b;

assign aqual=(a==b)?1:0;

endmodule

73-8译码器

module decoder_38(out,in);

output[7:0] out;

input[2:0] in;

reg[7:0] out;

always @(in)

begin

case(in)

3'd0: out=8'b11111110;

3'd1: out=8'b11111101;

3'd2: out=8'b11111011;

3'd3: out=8'b11110111;

3'd4: out=8'b11101111;

3'd5: out=8'b11011111;

3'd6: out=8'b10111111;

3'd7: out=8'b01111111;

endcase

end

endmodule

module decoder(out,in);

output[7:0]out;

input [2:0]in;

assign out=1’b1<

endmodule

88-3编码器

module encoder8_3(none_on,outcode,a,b,c,d,e,f,g,h);

output none_on;

output[2:0] outcode;

input a,b,c,d,e,f,g,h;

reg[3:0] outtemp;

assign {none_on,outcode}=outtemp;

always @(a or b or c or d or e or f or g or h)

begin

if(h) outtemp=4'b0111;

else if(g) outtemp=4'b0110;

else if(f) outtemp=4'b0101;

else if(e) outtemp=4'b0100;

else if(d) outtemp=4'b0011;

else if(c) outtemp=4'b0010;

else if(b) outtemp=4'b0001;

else if(a) outtemp=4'b0000;

else outtemp=4'b1000;

end

endmodule

98位数据锁存器

module latch_8(qout,data,clk);

output[7:0] qout;

input[7:0] data;

input clk;

reg[7:0] qout;

always @(clk or data)

begin

if (clk) qout<=data;

end

endmodule

10、奇偶检验位生成器

module parity(even_bit,odd_bit,input_bus);

output even_bit,odd_bit;

input[7:0] input_bus;

assign odd_bit = ^ input_bus; //产生奇校验位

assign even_bit = ~odd_bit; //产生偶校验位

endmodule

11、三态输出驱动器

module trist(out,in,enable);

output out;

input in,enable;

assign out=enable?in:’bz;

endmodule

module trist(out,in,enable);

output out;

input in,enable;

bufifl mybufl(out,in,enable);

endmodule

128位移位寄存器

module shifter(din,clk,clr,dout);

input din,clk,clr;

output[7:0] dout;

reg[7:0] dout;

always @(posedge clk)

begin

if (clr) dout<= 8'b0; //同步清0,高电平有效

else

begin

dout <= dout << 1; //输出信号左移一位

dout[0] <= din; //输入信号补充到输出信号的最低位

end

end

endmodule

13、四位计数器

module counter(Q,clock,clear);

output[3:0]Q;

input clock,clear;

reg[3:0]Q;

always@(posedge clear or negedge clock)

begin

if(clear)

Q<=4’d0;

else

Q<=Q+1;

end

endmodule

5)程序设计题:

1.五人表决器的设计

module vote5(a,b,c,d,e,f);

input a,b,c,d,e;

output f;

reg f;

reg[2:0] count1;

initial count1=0;

always@(a,b,c,d,e)

begin

count1<=a+b+c+d+e;

f=count1<3?0:1;

end

endmodule

2.分频器的设计

module adder(clk,z); 

output z; 

reg q; 

reg z; 

always@(posedge clk) 

begin if(q%9==0) 

z<=q; 

else 

q=q+1; 

end 

endmodule 

module counter9(clk,datein,z); 

output z; 

input clk; 

input datein; 

reg z; 

reg[3:0] q; 

always@(posedge clk)

begin 

q<=q+1; 

if (q==4'b1001) 

begin 

q<=4'b0000;    

z<=datein; 

end 

end 

endmodule

3.7段数码管的译码器设计

module SEG7_LUT (

  input      [3:0] iDIG,

  output reg [6:0] oSEG

);

always@(iDIG) 

begin

  case(iDIG)
    4'h1: oSEG = 7'b1111001;  // ---t----
    4'h2: oSEG = 7'b0100100;  // |      |
    4'h3: oSEG = 7'b0110000;  // lt     rt
    4'h4: oSEG = 7'b0011001;  // |      |
    4'h5: oSEG = 7'b0010010;  // ---m----
    4'h6: oSEG = 7'b0000010;  // |      |
    4'h7: oSEG = 7'b1111000;  // lb     rb
    4'h8: oSEG = 7'b0000000;  // |      |
    4'h9: oSEG = 7'b0011000;  // ---b----
    4'ha: oSEG = 7'b0001000;
    4'hb: oSEG = 7'b0000011;  
    4'hc: oSEG = 7'b1000110;  
    4'hd: oSEG = 7'b0100001;  
    4'he: oSEG = 7'b0000110;  
    4'hf: oSEG = 7'b0001110;  
    default: oSEG = 7'b1000000;  
  endcase                     

end                           

endmodule

4.计数器的设计

module counter(input bn,

output reg[7:0] segcode,

output [3:0] an

);

reg[3:0] count;

assign an=4'b0111;

initial

begin

count=0;

end

always @(posedge bn)

count<=count+1;

always @(count)

case(count)

0:segcode=8'b11000000;//0

1:segcode=8'b11111001;//1

2:segcode=8'b10100100;//2

3:segcode=8'b10110000;//3

4:segcode=8'b10011001;//4

5:segcode=8'b10010010;//5

6:segcode=8'b10000010;//6

7:segcode=8'b11111000;//7

8:segcode=8'b10000000;//8

9:segcode=8'b10010000;//9

'ha:segcode=8'b10001000;//a

'hb:segcode=8'b10000011;//b

'hc:segcode=8'b11000110;//c

'hd:segcode=8'b10100001;//d

'he:segcode=8'b10000110;//e

'hf:segcode=8'b10001110;//f

default:segcode=8'b11111111;

endcase

endmodule

5.流水灯的设计

module ledflash(

output [7:0] ld,

input clk

);

reg clk1s;

reg[7:0] tmp;

reg[31:0] count;

assign ld=tmp;

initial

begin

clk1s=0;

tmp=8'b00000001;

count=0;

end

always@(posedge clk)

begin

count<=count+1;

if (count==25000000)

begin

count<=0;

clk1s<=~clk1s;

end

end

always@(posedge clk1s)

begin

if (clk1s==1)

tmp={tmp[6:0],tmp[7]};

end

endmodule

6.移位寄存器(略)

7.根据状态转移图写Verilog模块(4状态模型如下)

Module fsm(clock,reset,a,k2,k1);

input clock,reset,a;

output k2,k1;

output[1 :0]state ;

reg k2,k1 ;

reg[1 :0]state ;

paremeter Idle=2’b00 ;

Start=2’b01 ;

Stop=2’b10 ;

Clear=2’b11 ;

always@(posedge clock)

if( !reset)

begin

state<=Idle ;

k2<=0 ;

k1<=0 ;

end

else

case(state)

Idle :if(a) begin

state<=Start ;

K1<=0 ;

end

Else begin

state<=Idle ;

k2<=0 ;

k1<=0 ;

end

Start :if( !a)state<=Stop ;

else state<=Start ;

end

Stop :if(a)begin

state<=Clear ;

k2<=1 ;

end

else begin

start<=Stop ;

k2<=0 ;

k1<=0 ;

end

Clear :if( !a)begin

State<=Idle ;

K2<=0 ;

K1<=1 ;

End

Else begin

State<=Clear :

K2<=0 ;

K1<=1 ;

End

Default :state<=2’bxx ;

Endcase

Endmodule

8.运算器的设计加、减、乘、按位与等

module jsq(a,b,c,out); 

input[7:0]a,b; 

input[1:0]c; 

otput[15:0]out; 

reg [15:0]out 

reg[7:0]out1,out2; 

always@(a,b,c,out) 

case(c) 

2'b00:out=a+b; 

2'b01:out=a-b; 

2'b10:out=a*b; 

2'b11: 

begin 

out1=a/b; 

out2=a%b; 

out={out1,out2}; 

end 

default:; 

endcase 

endmodule

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服