前言
- 硬件工程師近年來(lái)也開(kāi)始慢慢吃香,校招進(jìn)大廠年薪總包不下30-40w的人數(shù)一大把!而且大廠人數(shù)并沒(méi)有飽和!
- 本期是【Verilog刷題篇】硬件工程師從0到入門(mén)3|組合邏輯復(fù)習(xí)+時(shí)序邏輯入門(mén),有不懂的地方可以評(píng)論進(jìn)行討論! - 推薦給大家一款刷題、面試的神器,我也是用這一款神器進(jìn)行學(xué)習(xí)Verilog硬件代碼的!
- ~鏈接如下:刷題面試神器跳轉(zhuǎn)鏈接
- 也歡迎大家去??筒榭从布こ處熣衅嘎毼坏母黝愘Y料,并進(jìn)行提前批投遞面試!
- 小白新手可以通過(guò)該神器進(jìn)行日常的刷題、看大廠面經(jīng)、學(xué)習(xí)計(jì)算機(jī)基礎(chǔ)知識(shí)、與大牛面對(duì)面溝通~ 刷題的圖片已經(jīng)放在下面了~
Q1:數(shù)據(jù)選擇器實(shí)現(xiàn)邏輯電路
問(wèn)題描述:請(qǐng)使用此4選1數(shù)據(jù)選擇器和必要的邏輯門(mén)實(shí)現(xiàn)下列表達(dá)式。
L=A?B+A?~C+B?C 數(shù)據(jù)選擇器的邏輯符號(hào)如下圖:
數(shù)據(jù)選擇器代碼如下,可在本題答案中添加并例化此數(shù)據(jù)選擇器。
module data_sel(
input S0 ,
input S1 ,
input D0 ,
input D1 ,
input D2 ,
input D3 ,
output wire Y
);
assign Y = ~S1 & (~S0&D0 | S0&D1) | S1&(~S0&D2 | S0&D3);
endmodule
示例輸入:
input A ,
input B ,
input C
示例輸出:
output wire L
參考代碼:
`timescale 1ns/1ns
module data_sel(
input S0 ,
input S1 ,
input D0 ,
input D1 ,
input D2 ,
input D3 ,
output wire Y
);
assign Y = ~S1 & (~S0&D0 | S0&D1) | S1&(~S0&D2 | S0&D3);
endmodule
module sel_exp(
input A ,
input B ,
input C ,
output wire L
);
data_sel m1(C,1'b0,A,B,1'b0,1'b0,L);
endmodule
Q2:根據(jù)狀態(tài)轉(zhuǎn)移表實(shí)現(xiàn)時(shí)序電路
問(wèn)題描述:某同步時(shí)序電路轉(zhuǎn)換表如下,請(qǐng)使用D觸發(fā)器和必要的邏輯門(mén)實(shí)現(xiàn)此同步時(shí)序電路,用Verilog語(yǔ)言描述。
電路的接口如下圖所示。
示例輸入:
input A ,
input clk ,
input rst_n
示例輸出:
output wire Y
參考代碼:
`timescale 1ns/1ns
module seq_circuit(
input A ,
input clk ,
input rst_n,
output wire Y
);
reg[1:0]Q;
initial Q=2'b00;
always @(posedge clk or negedge rst_n)
begin
if(~rst_n)
begin
Q<=2'b00;
end
else
begin
Q[0]<=~Q[0];
Q[1]<=(~A)&(Q[1]^Q[0])|A&(~Q[1]^Q[0]);
end
end
assign Y=Q[1]&Q[0];
endmodule
Q3:根據(jù)狀態(tài)轉(zhuǎn)移圖實(shí)現(xiàn)時(shí)序電路
問(wèn)題描述:某同步時(shí)序電路的狀態(tài)轉(zhuǎn)換圖如下,→上表示“C/Y”,圓圈內(nèi)為現(xiàn)態(tài),→指向次態(tài)。
請(qǐng)使用D觸發(fā)器和必要的邏輯門(mén)實(shí)現(xiàn)此同步時(shí)序電路,用Verilog語(yǔ)言描述。
電路的接口如下圖所示,C是單bit數(shù)據(jù)輸入端。
示例輸入:
input C ,
input clk ,
input rst_n
示例輸出:
output wire Y
參考代碼:
`timescale 1ns/1ns
module seq_circuit(
input C ,
input clk ,
input rst_n,
output reg Y
);
parameter [1:0] st0 = 2'b00,
st1 = 2'b01,
st2 = 2'b10,
st3 = 2'b11;
reg [1:0] cst,nst;
always@(posedge clk or negedge rst_n) begin
if(!rst_n)begin
cst <= 2'b00;
nst <= 2'b00;
end
else
cst <= nst;
end
always@(*) begin
case(cst)
st0:begin
nst = (C==1) ? st1 : st0;
end
st1:begin
nst = (C==1) ? st1 : st3;
end
st2:begin
nst = (C==1) ? st2 : st0;
end
st3:begin
nst = (C == 1) ? st2 : st3;
end
default:
nst = st0;
endcase
end
always @(*) begin
if(((cst == st2) && C) || (cst == st3) )
Y = 1'b1;
else
Y = 1'b0;
end
endmodule
Q4:ROM的簡(jiǎn)單實(shí)現(xiàn)
問(wèn)題描述:實(shí)現(xiàn)一個(gè)深度為8,位寬為4bit的ROM,數(shù)據(jù)初始化為0,2,4,6,8,10,12,14??梢酝ㄟ^(guò)輸入地址addr,輸出相應(yīng)的數(shù)據(jù)data。
接口信號(hào)圖如下:
輸入描述:
clk:系統(tǒng)時(shí)鐘
rst_n:異步復(fù)位信號(hào),低電平有效
addr:8bit位寬的無(wú)符號(hào)數(shù),輸入到ROM的地址
輸出描述:
data:4bit位寬的無(wú)符號(hào)數(shù),從ROM中讀出的數(shù)據(jù)
參考代碼:
`timescale 1ns/1ns
module rom(
input clk,
input rst_n,
input [7:0]addr,
output [3:0]data
);
reg [3:0] romreg[7:0];
integer i;
always @ (posedge clk or negedge rst_n)
begin
if (~rst_n) begin
romreg[0]<=4'd0;
romreg[1]<=4'd2;
romreg[2]<=4'd4;
romreg[3]<=4'd6;
romreg[4]<=4'd8;
romreg[5]<=4'd10;
romreg[6]<=4'd12;
romreg[7]<=4'd14;
end
else begin
for (i=0 ; i<8 ; i=i+1) begin : rom_i
romreg[i]<=romreg[i]; //保持不變
end
end
end
assign data = romreg[addr]; //異步輸出
endmodule
Q5:邊沿檢測(cè)
問(wèn)題描述:有一個(gè)緩慢變化的1bit信號(hào)a,編寫(xiě)一個(gè)程序檢測(cè)a信號(hào)的上升沿給出指示信號(hào)rise,當(dāng)a信號(hào)出現(xiàn)下降沿時(shí)給出指示信號(hào)down。
注:rise,down應(yīng)為單脈沖信號(hào),在相應(yīng)邊沿出現(xiàn)時(shí)的下一個(gè)時(shí)鐘為高,之后恢復(fù)到0,一直到再一次出現(xiàn)相應(yīng)的邊沿。
示例輸入:
clk:系統(tǒng)時(shí)鐘信號(hào)
rst_n:異步復(fù)位信號(hào),低電平有效
a:?jiǎn)伪忍匦盘?hào),作為待檢測(cè)的信號(hào)
示例輸出:
rise:?jiǎn)伪忍匦盘?hào),當(dāng)輸入信號(hào)a出現(xiàn)上升沿時(shí)為1,其余時(shí)刻為0
down:?jiǎn)伪忍匦盘?hào),當(dāng)輸入信號(hào)a出現(xiàn)下降沿時(shí)為1,其余時(shí)刻為0
參考代碼:
`timescale 1ns/1ns
module edge_detect(
input clk,
input rst_n,
input a,
output wire rise,
output wire down
);
reg a1,a2;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
a1<='b0;
a2<='b0;
end
else
begin
a1<=a;
a2<=a1;
end
end
assign rise = ((a1 & !a2)===1);
assign down = ((!a1 & a2)===1);
endmodule
總結(jié):小白跟大牛都在用的平臺(tái)
- 硬件工程師近年來(lái)也開(kāi)始慢慢吃香,校招進(jìn)大廠年薪總包不下30-40w的人數(shù)一大把!而且大廠人數(shù)并沒(méi)有飽和!
- 本期是【Verilog刷題篇】硬件工程師從0到入門(mén)3|組合邏輯復(fù)習(xí)+時(shí)序邏輯入門(mén),有不懂的地方可以評(píng)論進(jìn)行討論!
快來(lái)點(diǎn)擊鏈接進(jìn)行跳轉(zhuǎn)注冊(cè),開(kāi)始你的保姆級(jí)刷題之路吧!刷題打怪碼神之路
另外這里不僅僅可以刷題,你想要的這里都會(huì)有,十分適合小白和初學(xué)者入門(mén)學(xué)習(xí)~
1、算法篇(398題):面試必刷100題、算法入門(mén)、面試高頻榜單
2、數(shù)據(jù)結(jié)構(gòu)篇(300題):都是非常經(jīng)典的鏈表、樹(shù)、堆、棧、隊(duì)列、動(dòng)態(tài)規(guī)劃等
3、語(yǔ)言篇(500題):C/C++、java、python入門(mén)算法練習(xí)
4、SQL篇(82題):快速入門(mén)、SQL必知必會(huì)、SQL進(jìn)階挑戰(zhàn)、面試真題
5、大廠筆試真題:字節(jié)跳動(dòng)、美團(tuán)、百度、騰訊…掌握經(jīng)驗(yàn)不在懼怕面試!文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-777984.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-777984.html
到了這里,關(guān)于【Verilog刷題篇】硬件工程師從0到入門(mén)3|組合邏輯復(fù)習(xí)+時(shí)序邏輯入門(mén)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!