前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数字IC设计经典笔试题之【verilog篇】

数字IC设计经典笔试题之【verilog篇】

作者头像
数字芯片社区
发布2020-07-20 15:46:24
2.3K0
发布2020-07-20 15:46:24
举报
文章被收录于专栏:数字芯片数字芯片数字芯片

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-

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数字ICer 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档