常见面试笔试题verilog程序库汇编文档格式.docx

上传人:b****1 文档编号:1282390 上传时间:2023-04-30 格式:DOCX 页数:23 大小:325.92KB
下载 相关 举报
常见面试笔试题verilog程序库汇编文档格式.docx_第1页
第1页 / 共23页
常见面试笔试题verilog程序库汇编文档格式.docx_第2页
第2页 / 共23页
常见面试笔试题verilog程序库汇编文档格式.docx_第3页
第3页 / 共23页
常见面试笔试题verilog程序库汇编文档格式.docx_第4页
第4页 / 共23页
常见面试笔试题verilog程序库汇编文档格式.docx_第5页
第5页 / 共23页
常见面试笔试题verilog程序库汇编文档格式.docx_第6页
第6页 / 共23页
常见面试笔试题verilog程序库汇编文档格式.docx_第7页
第7页 / 共23页
常见面试笔试题verilog程序库汇编文档格式.docx_第8页
第8页 / 共23页
常见面试笔试题verilog程序库汇编文档格式.docx_第9页
第9页 / 共23页
常见面试笔试题verilog程序库汇编文档格式.docx_第10页
第10页 / 共23页
常见面试笔试题verilog程序库汇编文档格式.docx_第11页
第11页 / 共23页
常见面试笔试题verilog程序库汇编文档格式.docx_第12页
第12页 / 共23页
常见面试笔试题verilog程序库汇编文档格式.docx_第13页
第13页 / 共23页
常见面试笔试题verilog程序库汇编文档格式.docx_第14页
第14页 / 共23页
常见面试笔试题verilog程序库汇编文档格式.docx_第15页
第15页 / 共23页
常见面试笔试题verilog程序库汇编文档格式.docx_第16页
第16页 / 共23页
常见面试笔试题verilog程序库汇编文档格式.docx_第17页
第17页 / 共23页
常见面试笔试题verilog程序库汇编文档格式.docx_第18页
第18页 / 共23页
常见面试笔试题verilog程序库汇编文档格式.docx_第19页
第19页 / 共23页
常见面试笔试题verilog程序库汇编文档格式.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

常见面试笔试题verilog程序库汇编文档格式.docx

《常见面试笔试题verilog程序库汇编文档格式.docx》由会员分享,可在线阅读,更多相关《常见面试笔试题verilog程序库汇编文档格式.docx(23页珍藏版)》请在冰点文库上搜索。

常见面试笔试题verilog程序库汇编文档格式.docx

if(b[i])outcome<

=outcome+(a<

<

(i-1));

end

另一种乘法器。

在初始化之际,取乘数和被乘数的正负关系,然后取被乘数和乘数的正值。

输出结果根据正负关系取得。

elseif(Start_Sig)

case(i)

0:

isNeg<

=Multiplicand[7]^Multiplier[7];

Mcand<

=Multiplicand[7]?

(~Multiplicand+1'

b1):

Multiplicand;

Mer<

=Multiplier[7]?

(~Multiplier+1'

Multiplier;

Temp<

=16'

d0;

i<

=i+1'

b1;

end

1:

//Multipling

if(Mer==0)i<

elsebeginTemp<

=Temp+Mcand;

=Mer-1'

2:

beginisDone<

=1'

3:

b0;

=2'

endcase

assignDone_Sig=isDone;

assignProduct=isNeg?

(~Temp+1'

Temp;

endmodule

booth乘法器

modulebooth_multiplier_module

inputCLK,

inputRSTn,

inputStart_Sig,

0]A,

0]B,

outputDone_Sig,

output[15:

0]Product,

output[7:

0]SQ_a,

0]SQ_s,

output[16:

0]SQ_p

);

reg[3:

0]i;

reg[7:

0]a;

//resultofA

0]s;

//reverseresultofA

reg[16:

0]p;

//p空间,16+1位

0]X;

//指示n次循环

regisDone;

always@(posedgeCLKornegedgeRSTn)

if(!

RSTn)

begin

i<

=4'

a<

=8'

s<

p<

=17'

X<

isDone<

end

elseif(Start_Sig)

case(i)

0:

begina<

=A;

s<

=(~A+1'

b1);

p<

={8'

d0,B,1'

b0};

1:

if(X==8)beginX<

=i+4'

d2;

elseif(p[1:

0]==2'

b01)beginp<

={p[16:

9]+a,p[8:

0]};

b10)beginp<

9]+s,p[8:

elsei<

//00和11,无操作

2:

beginp<

={p[16],p[16:

1]};

X<

=X+1'

=i-1'

end//右移,最高位补0or1.

3:

beginisDone<

4:

endcase

assignDone_Sig=isDone;

assignProduct=p[16:

1];

除法器

moduledivider_module

0]Dividend,

0]Divisor,

0]Quotient,

0]Reminder,

0]Dend;

0]Dsor;

reg[7:

0]Q;

0]R;

regisNeg;

begin

Dend<

Dsor<

Q<

isDone<

elseif(Start_Sig)

case(i)

=Dividend[7]?

~Dividend+1'

b1:

Dividend;

=Divisor[7]?

Divisor:

(~Divisor+1'

isNeg<

=Dividend[7]^Divisor[7];

if(Divisor>

Dend)

beginQ<

=isNeg?

(~Q+1'

Q;

elsebeginDend<

=Dend+Dsor;

=Q+1'

2:

3:

endcase

assignQuotient=Q;

assignReminder=Dend;

除法器2

modulediv(a,b,clk,result,yu)

input[3:

outputreg[3:

0]result,yu;

inputclk;

reg[1:

0]state;

reg[3:

0]m,n;

parameterS0=2'

b00,S1=2'

b01,S2=2'

b10;

always@(posedgeclk)

begincase(state)

S0:

beginif(a>

b)beginn<

=a-b;

m<

=4'

b0001;

state<

=S1;

elsebeginm<

b0000;

n<

=a;

=S2;

S1:

beginif(n>

=b)beginm<

=m+1;

=n-b;

state<

end

elsebeginstate<

S2:

beginresult<

=m;

yu<

=n;

=S0;

defule:

13、一个可预置初值的7进制循环计数器

①verilog

modulecount(clk,reset,load,date,out);

inputload,clk,reset;

0]date;

outputreg[3:

0]out;

parameterWIDTH=4'

d7;

always@(clkorreset)

begin

if(reset)out<

elseif(load)out<

=date;

elseif(out==WIDTH-1)out<

elseout<

=out+1;

Johnson计数器

约翰逊(Johnson)计数器又称扭环计数器,是一种用n位触发器来表示2n个状态的计数器。

它与环形计数器不同,后者用n位触发器仅可表示n个状态。

n位二进制计数器(n为触发器的个数)有2^n个状态。

若以四位二进制计数器为例,它可表示16个状态。

“0000-1000-1100-1110-1111-0111-0011-0001-0000-1000……”

moduleJohnson(inputclk,inputclr,outputreg[N-1:

0]q);

always@(posedgeclkornegedgeclr)

if(!

clr)q<

={N{1’b0}}

elseif(!

q[0])q<

={1’b1,q[N-1:

1]};

elseq<

={1’b0,q[N-1]:

1}];

任意分频,占空比不为50%

always(clk)

beginif(count==x-1)count<

elsecount<

=count+1;

assignclkout=count[y]//y一般用count的最高位

偶数分频(8分频,占空比50%)(计数至n-1,翻转)

modulecount5(reset,clk,out)

inputclk,reset;

outputout;

reg[1:

0]count;

always@(clk)

if(reset)begincount<

out<

elseif(count==3)begincount<

out<

=!

out:

elsecount<

奇数分频电路(占空比50%)。

reg[2:

regcount1;

regcount2;

always@(posedgeclk)

if(reset)beginm<

count1<

elsebeginif(m==4)m<

elsem<

//“4”为分频数NUM-1,NUM=5

if(m<

2)count1<

=1;

elsecount1<

always@(negedgeclk)

if(reset)beginn<

count2<

elsebeginif(n==4)n<

elsen<

=n+1;

if(n<

2)count2<

elsecount2<

assignout=count1|count2;

半整数分频

modulefdiv5_5(clkin,clr,clkout)

inputclkin,clr;

outputregclkout;

regclk1;

wireclk2;

integercount;

xorxor1(clk2,clkin,clk1)

always@(posedgeclkoutornegedgeclr)

beginif(~clr)beginclk1<

=1’b0;

elseclk1<

=~clk1;

always@(posedgeclk2ornegedgeclr)

beginif(~clr)

begincount<

clkout<

elseif(count==5)

=1’b1;

elsebegincount<

end

小数分频

N=M/P.N为分配比,M为分频器输入脉冲数,P为分频器输出脉冲数。

N=(8×

9+9×

1)/(9+1)=8.1先做9次8分频再做1次9分频。

modulefdiv8_1(clkin,rst,clkout)

inputclkin,rst;

reg[3:

0]cnt1,cnt2;

always@(posedgeclkinorposedgerst)

beginif(rst)begincnt1<

cnt2<

clkout<

elseif(cnt1<

9)//cnt1,0~8

if(cnt2<

7)begincnt2<

=cnt2+1;

elsebegincnt2<

cnt1<

=cnt1+1;

elsebegin//cnt1,9

8)begincnt2<

串并转换

modulep2s(clk,clr,load,pi,so)

inputclk,clr,load;

input[3:

0]pi;

outputso;

0]r;

if(~clr)r<

h0;

elseif(load)r<

=pi;

elser<

={r,1'

b0};

//orr<

1;

assignso=r[3];

modules2p(clk,clr,en,si,po)

inputclk,clr,en,si;

output[3:

0]po;

=8’ho;

elser<

={r,si};

assignpo=(en)?

r:

4’h0;

b)试用VHDL或VERILOG、ABLE描述8位D触发器逻辑。

moduledff(q,qn,d,clk,set,reset)

input[7:

0]d,set;

outputreg[7:

0]q,qn;

always@(posedgeclk)

if(reset)beginq<

=8’h00;

qn<

=8’hFF;

elseif(set)beginq<

elsebeginq<

=d;

=~d;

序列检测“101”

modulexulie101(clk,clr,x,z);

inputclk,clr,x;

outputregz;

0]state,next_state;

parameters0=2'

b00,s1=2'

b01,s2=2'

b11,s3=2'

always@(posedgeclkorposedgeclr)

beginif(clr)state<

=s0;

elsestate<

=next_state;

always@(stateorx)

case(state)

s0:

beginif(x)next_state<

=s1;

elsenext_state<

s1:

=s2;

s2:

=s3;

s3:

default:

next_state<

endcase

always@(state)

begincase(state)

s3:

z=1;

default:

z=0;

endcase

按键消抖

1.采用一个频率较低的时钟,对输入进行采样,消除抖动。

moduleswitch(clk,keyin,keyout)

parameterCOUNTWIDTH=8;

inputclk,keyin;

outputregkeyout;

reg[COUNTWIDTH-1:

0]counter;

wireclk_use;

//频率较低的时钟

assignclk_use=counter[COUNTWIDTH-1];

always@(posegdeclk)

counter<

=counter+1’b1;

always@(posedgeclk_use)

keyout<

=keyin;

2.moduleswitch(clk,keyin,keyout)

initialcounter<

=0,keyout<

=0,keyin<

if(keyin=1)beginkey_m<

=keyin,counter<

=counter+1;

elsecounter<

if(keyin&

&

counter[m])keyout<

//m定义时延

数码管显示

modulenumber_mod_module//分别取得数字的十位和个位

(CLK,RSTn,Number_Data,Ten_Data,One_Data);

inputCLK;

inputRSTn;

0]Number_Data;

output[3:

0]Ten_Data;

0]One_Data;

reg[31:

0]rTen;

0]rOne;

rTen<

=32'

rOne<

else

begin

=Number_Data/10;

=Number_Data%10;

assignTen_Data=rTen[3:

0];

assignOne_Data=rOne[3:

moduleled(CLK,Ten_Data,One_Data,led0,led1);

//数码管显示

input[3:

0]Ten_Data,One_Data;

inputCLK;

0]led0,led1;

always@(posedgecp_50)

casez(One_Data)

4'

d0:

led0=8'

b1100_0000;

d1:

b1111_1001;

d2:

b1010_0100;

d3:

b1011_0000;

d4:

b1001_1001;

d5:

b1001_0010;

d6:

b1000_0010;

d7:

b1111_1000;

d8:

b1000_0000;

d9:

b1001_0000;

default:

b1111_1111;

endcase

casez(Ten_Data)

led1

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2