数字IC设计经典笔试题之【verilog篇】
时间:2022-07-22
本文章向大家介绍数字IC设计经典笔试题之【verilog篇】,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Verilog
1:HDL语言的层次概念?
HDL语言是分层次的、类型的,最常用的层次概念有系统与标准级、功能模块级,行为级,寄存器传输级和门级。
系统级,算法级,RTL级(行为级),门级,开关级
2:设计一个自动饮料售卖机,饮料10分钱,硬币有5分和10分两种,并考虑找零。
a.画出fsm(有限状态机)
b.用verilog编程,语法要符合FPGA设计的要求
c.设计工程中可使用的工具及设计大致过程?
设计过程:
a、首先确定输入输出,A=1表示投入10分,B=1表示投入5分,Y=1表示弹出饮料,Z=1表示找零。
b、确定电路的状态,S0表示没有进行投币,S1表示已经有5分硬币。
c、画出状态转移图。
module sell(clk,rst,a,b,y,z);
input clk,rst,a,b;
output y,z;
parameter s0=0,s1=1;
reg state,next_state;
always@(posedge clk)
begin
if(!rst)
state<=s0;
else
state<=next_state;
end
always@(a or b or cstate)begin
y=0;z=0;
case(state)
s0: if(a==1&&b==0) begin
next_state=s1;
end
else if(a==0&&b==1) begin
next_state=s0; y=1;
end
else begin
next_state=s0;
end
s1: if(a==1&&b==0)begin
next_state=s0;y=1;
end
else if(a==0&&b==1)begin
next_state=s0; y=1;z=1;
end
else begin
next_state=s0;
end
default: next_state=s0;
endcase
end
endmodule
3:用D触发器做个二分频的电路?画出逻辑电路?
module div2(clk,rst,clk_out);
input clk,rst;
output reg clk_out;
always@(posedge clk)begin
if(!rst)begin
clk_out <=0;
end
else begin
clk_out <=~ clk_out;
end
end
endmodule
现实工程设计中一般不采用这样的方式来设计,二分频一般通过DCM来实现。通过DCM得到的分频信号没有相位差,或者是从Q端引出加一个反相器。
4:用你熟悉的设计方式设计一个可预置初值的7进制循环计数器,15进制的呢?
module counter7(clk,rst,load,data,cout);
input clk,rst,load;
input [2:0] data;
output reg [2:0] cout;
always@(posedge clk)begin
if(!rst)begin
cout<=3’d0;
end
else if(load)begin
cout<=data;
end
else if(cout>=3’d6)begin
cout<=3’d0;
end
else begin
cout<=cout+3’d1;
end
end
endmodule
5:用Verilog或VHDL写一段代码,实现消除一个glitch(毛刺)?
将传输过来的信号经过两级触发器就可以消除毛刺。(这是我自己采用的方式:这种方式消除毛刺是需要满足一定条件的,并不能保证一定可以消除)
module glitch(clk,data,q_out)
input clk,data;
output reg q_out;
reg q1;
always@(posedge clk)begin
q1<=data;
q_out<=q1;
end
endmodule
6:画出DFF的结构图,用verilog实现之。
module dff(clk,d,qout);
input clk,d;
output qout;
reg qout;
always@(posedge clk)begin
if(!reset)begin
qout<=0;
end
else begin
qout<=d;
end
end
endmodule
7:请用HDL描述四位的全加法器、5分频电路。
module adder4(a,b,ci,s,co);
input ci;
input [3:0] a,b;
output co;
output [3:0] s;
assign {co,s}=a+b+ci;
endmodule
module div5(clk,rst,clk_out);
input clk,rst;
output clk_out;
reg [3:0] count;
always@(posedge clk)begin
if(!rst) begin
count<=0;
clk_out=0;
end
else if(count==3’d5)begin
count<=0;
clk_out=~clk_out;
end
else begin
count<=count+1;
end
end
endmodule
8:实现奇数倍分频且占空比为50%的情况。
module div7 ( clk, reset_n, clkout );
input clk,reset_n;
output clkout;
reg [3:0] count;
reg div1;
reg div2;
always @( posedge clk )
begin
if ( ! reset_n )
count <= 3'b000;
else
case ( count )
3'b000 : count <= 3'b001;
3'b001 : count <= 3'b010;
3'b010 : count <= 3'b011;
3'b011 : count <= 3'b100;
3'b100 : count <= 3'b101;
3'b101 : count <= 3'b110;
3'b110 : count <= 3'b000;
default :
count <= 3'b000;
endcase
end
always @( posedge clk )
begin
if ( ! reset_n )
div1 <= 1'b0;
else if ( count == 3'b000 )
div1 <= ~ div1;
end
always @( negedge clk )
begin
if ( ! reset_n )
div2 <= 1'b0;
else if ( count == 3'b100 )
div2 <= ~ div2;
end
assign clkout = div1 ^ div2;
endmodule
9:用VERILOG或VHDL写一段代码,实现10进制计数器。
module counter10(clk,rst,count);
input clk,rst;
output [3:0] count;
reg [3:0] count;
always@(posedge clk)begin
if(!rst)begin
count<=0;
end
else if(count>=4’d9)begin
count<=0;
end
else begin
count<=count+1;
end
end
endmodule
-END-
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法