重要聲明
讀書和實踐是學習Verilog的正確途徑。
本產品不能代替verilog的正規學習,同時可能有上網成癮、觀點誤導等副作用,請謹慎使用。
001.
畫出CMOS反相器的電路原理圖。
002.
反向器的速度與哪些因素有關?什么是轉換時間(transition time)和傳播延遲(propagation delay)?
003.
解釋一下Vih,Vil,Vol,Voh,Vt。
004.
什么是原碼,反碼,補碼,符號-數值碼。以4bit為例,給出各自表示的數值范圍。
005.
十進制轉換為二進制編碼:
127
-127
127.375
-127.375
006.
畫出CMOS三態緩沖器的電路原理圖,解釋一下高阻態。
007.
什么是open-drain output?
008.
只用2輸入mux,實現與,或,非,異或。2輸入mux定義為
o = s ? a : b;
009.
相同面積的cmos與非門和或非門哪個更快?
010.
說明代碼中w1和 w2對應電路的具體區別:
wire [2:0] val;
wire w1 = val > 0;
wire w2 = val >= 0;
011.
什么是競爭和冒險?
012.
設計1bit全加器,采用verilog描述並畫出門級電路圖。
013.
設計2-4譯碼器。采用verilog描述並畫出門級電路圖。
014.
設計BCD譯碼器,輸入0~9。采用verilog描述並畫出門級電路圖。
015.
用verilog設計8bit奇偶校驗電路。
016.
用verilog描述一個多路復用器,輸入的通道數目N,每一路的位寬為M。
017.
用verilog實現 z = abs(x - y)
1) x和y是8bit無符號數
2) x和y是8bit有符號數(2補碼)
018.
用verilog實現取整函數(ceil、floor、round)。以5bit為例,小數部分1位,取整后保留4bit。
wire [4:0] data;
wire [3:0] data_ceil;
wire [3:0] data_floor;
wire [3:0] data_round;
019.
用verilog實現乘法y = a * b
a和b都是8bit,考慮三種情況:
1) 都是無符號數
2) 都是有符號數
3) a是有符號數,b是無符號數
020.
輸入一個8bit數,統計其中1的個數。
021.
求三個數的最大值:y = max(a,b,c)
wire [3:0] a,b,c;
022.
畫一個D觸發器的電路圖。
023.
說明D觸發器與Latch的區別。
024.
解釋一下D觸發器的建立時間與保持時間。
025.
解釋一下Latch的建立時間與保持時間。
026.
用verilog實現1bit信號邊沿檢測功能,輸出一個周期寬度的脈沖信號。
1) 上升沿
2) 下降沿
3) 上升沿或者下降沿
input clk, rst_n, data;
output data_edge;
027.
用verilog實現一個4bit二進制計數器。
1) 異步復位
2) 同步復位
input clk, rst_n;
output [3:0] o_cnt;
028.
用verilog實現串並轉換。
1) lsb優先
2) msb優先
input clk, rst_n, data_i;
output [7:0] data_o;
029.
序列檢測器:有“101”序列輸入時輸出為1,其他輸入情況下,輸出為0。畫出狀態轉移圖,並用verilog描述。
input clk, rst_n, data;
output flag_101;
030.
用verilog實現兩路數據的乘法運算,要求只使用1個乘法器。
input clk, rst_n;
input sel_x;
input [7:0] da_x_y;
input [7:0] db_x_y;
output reg [15:0] dout_x_y;
031.
名詞解釋:
-
ROM
-
RAM
-
SRAM
-
DRAM
-
SDRAM
-
EEPROM
-
DDR
-
FLASH
032.
用verilog實現一個深度16,位寬8bit的ROM,初始值等於對應地址加上0xA0。
moudule rom_16x8 (
...
);
...
endmodule
033.
畫出SRAM bit cell結構圖。
034.
用verilog實現一個單端口sram,深度16,位寬8bit。支持片選,讀寫請求,要求代碼可綜合。
module spram_16x8 (
input clk,
input [3:0] addr,
input [7:0] din,
output [7:0] dout,
...
);
...
endmodule
035.
用verilog實現一個同步雙端口sram,深度16,位寬8bit。A口讀出,B口寫入。支持片選,讀寫請求,要求代碼可綜合。
module dpram_16x8 (
input clk,
input [3:0] addr_a,
output [7:0] dout_a,
input [7:0] din_b,
input [3:0] addr_b,
...
);
...
endmodule
036.
用verilog實現一個異步雙端口ram,深度16,位寬8bit。A口讀出,B口寫入。支持片選,讀寫請求,要求代碼可綜合。
module dpram_16x8 (
input clk_a,
input [3:0] addr_a,
output [7:0] dout_a,
...
input clk_b,
input [7:0] din_b,
input [3:0] addr_b,
...
);
...
endmodule
037.
用verilog實現一個同步雙端口ram,深度16,位寬8bit。A口可讀可寫,B口可讀可寫。支持片選,讀寫請求,要求代碼可綜合。
module dpram_16x8 (
input clk,
input [7:0] din_a,
input [3:0] addr_a,
output [7:0] dout_a,
...
input [7:0] din_b,
output [7:0] dout_b,
input [3:0] addr_b,
...
);
...
endmodule
038.
用verilog實現一個3-tap低通FIR濾波器,輸入輸出為8bit無符號數,濾波器系數[1/4 1/2 1/4]
module fir_lpf_3tap (
input clk,
input rst_n,
input [7:0] din,
output [7:0] dout
);
...
endmodule
039.
用verilog實現一個3-tap低通FIR濾波器,輸入輸出為8bit無符號數,濾波器系數[1/4 1/2 1/4],支持bypass功能:fir_bypass為1時輸出原始數據。
module fir_lpf_3tap (
input clk,
input rst_n,
input fir_bypass,
input [7:0] din,
output [7:0] dout
);
...
endmodule
040.
用verilog實現一個低通FIR濾波器,輸入輸出為8bit無符號數,濾波器系數根據mode選擇:
mode 0:bypass
mode 1:[1 2 1]/4
mode 2:[1 2 2 2 1]/8
mode 3:[1 2 3 4 3 2 1]/16
module fir_lpf (
input clk,
input rst_n,
input [1:0] mode,
input [7:0] din,
output [7:0] dout
);
...
endmodule
041.
用verilog實現一個參數化的FIR濾波器。可配置參數包括 1. 輸入輸出數據位寬N 2. 濾波器階數T 3. 濾波器系數位寬M (輸入數據與濾波器系數為無符號數)
042.
用verilog實現一個3-tap低通FIR濾波器,Y通路輸入輸出為8bit無符號數,濾波器系數[1/4 1/2 1/4]。C通路bypass輸出。
module fir_lpf_3tap_YC (
input clk,
input rst_n,
input [7:0] yin,
output [7:0] yout,
input [7:0] cin,
output [7:0] cout
);
...
endmodule
043.
用verilog實現 y(n) = x(n) + x(n-1) + x(n-2) + x(n-3) + x(n-4)+ x(n-5)+ x(n-6)+ x(n-7) 輸入x是8bit無符號數。
044.
用verilog實現 y(n) = 0.75*x(n) + 0.25*y(n-1) x, y是8bit無符號數。
045.
用verilog實現二分頻。
046.
用verilog實現三分頻電路,要求輸出50%占空比。
047.
畫出clock gating cell的原理圖。
048.
用verilog實現靜態時鍾切換電路。外部管腳輸入sel,clk,testclk。sel為1輸出clk,sel為0輸出testclk。
module clkmux_DONTCH (
input sel,
input clk,
input testclk,
output clko
);
...
endmodule
049.
用verilog實現glitch free時鍾切換電路。輸入sel,clka,clkb,sel為1輸出clka,sel為0輸出clkb。
050.
解釋一下亞穩態。
051.
用verilog實現異步復位同步釋放電路。
052.
用verilog實現異步復位同步釋放電路,支持測試模式的復位信號切換。
053.
用verilog實現4bit約翰遜(Johnson)計數器。
054.
用verilog實現4bit環形計數器:復位有效時輸出0001,復位釋放后依次輸出0010,0100,1000,0001,0010…
055.
用verilog實現按鍵抖動消除電路,抖動小於15ms,輸入時鍾12MHz。
056.
用verilog實現PWM控制呼吸燈。呼吸周期2秒:1秒逐漸變亮,1秒逐漸變暗。系統時鍾24MHz,pwm周期1ms,精度1us。
057.
在clk a時鍾域的一個單周期脈沖信號,如何正確的傳遞到clk b時鍾域? 要考慮clk a和b的各種不同頻率/相位的場景。
058.
用verilog實現一個同步FIFO,深度16,數據位寬8bit。
059.
用verilog實現一個異步FIFO,深度16,數據位寬8bit。
060.
用verilog實現一個異步FIFO,深度17,數據位寬8bit。
061.
FIFO深度計算: 寫入時鍾20MHz,讀出時鍾40MHz,每1000個時鍾周期寫入500個數據,每4個時鍾周期讀出1個數據,讀寫數據位寬一致。
062.
用verilog實現valid-ready握手協議。
module handshake_pipe (
input clk,
input rst_n,
input valid_i,
output ready_o,
input din,
output valid_o,
input ready_i,
output dout
);
...
endmodule
063.
用verilog實現支持valid-ready握手協議的下采樣電路:每輸入2個數據,輸出1個數據。
module handshake_pipe_ds (
input clk,
input rst_n,
input valid_i,
output ready_o,
input din,
output valid_o,
input ready_i,
output dout
);
...
endmodule
064.
用verilog實現支持valid-ready握手協議的上采樣電路:每輸入1個數據,輸出2個數據。約定clk頻率高於輸出數據速率。
module handshake_pipe_us (
input clk,
input rst_n,
input valid_i,
output ready_o,
input [7:0] din,
output valid_o,
input ready_i,
output [7:0] dout
);
...
endmodule
065.
用verilog實現支持valid-ready握手協議的分路電路:輸入1路數據,輸出2路數據。
module handshake_pipe_split (
input clk,
input rst_n,
input valid_i,
output ready_o,
input [7:0] din,
output valid_1_o,
input ready_1_i,
output [7:0] dout_1,
output valid_0_o,
input ready_0_i,
output [7:0] dout_0
);
...
endmodule
066.
用verilog實現支持valid-ready握手協議的合並電路:輸入2路數據,輸出1路數據。
module handshake_pipe_merge (
input clk,
input rst_n,
input valid_0_i,
output ready_0_o,
input [7:0] din_0,
input valid_1_i,
output ready_1_o,
input [7:0] din_1,
output valid_o,
input ready_i,
output [15:0] dout
);
...
endmodule
067.
解釋一下valid-ready握手傳輸中的bubble問題,如何解決?
068.
使用valid-ready多級流水時,ready信號通路上組合邏輯過長會帶來什么問題?怎樣解決?
069.
用verilog實現配置寄存器接口。
地址0 :可讀可寫RW
地址1 :只讀RO
地址2 :只寫,自動清0
地址3 :保留
module blk_ctrl (
input clk,
input rst_n,
input wr,
input [1:0] addr,
input [7:0] wdata,
input rd,
output [7:0] rdata
);
...
endmodule
070.
解釋一下觸發器的setup和hold,在芯片使用中如果遇到時序問題,怎樣區分是setup還是hold的問題?
071.
解釋一下multi cycle path
072.
用verilog實現16bit復數乘法器。
073.
把十進制數8.15轉換為單精度浮點數。
074.
把十進制數-6.125轉換為雙精度浮點數。
075.
用verilog實現32位浮點數加法。
076.
用verilog實現16位浮點乘法。
077.
解釋booth乘法器實現原理。(以radix 4為例)
078.
用verilog實現4位超前進位加法器。
079.
用verilog實現8位桶形移位寄存器。
080.
用verilog實現一個深度為16的CAM。
081.
用verilog實現8位無符號除法。
082.
用verilog實現8位定點數開平方。
083.
用verilog實現log2(x),輸入x為16bit無符號數。
084.
設計1MHz正弦波發生器。
085.
用verilog實現三輸入round robin仲裁器。
086.
用verilog實現圖像行緩沖(line buffer),輸入數據Yi為8bit,每行數據1920個,要求同時輸出3行,即當前數據Y0,延遲1行對應的數據Y1,延遲2行對應的數據Y2。
087.
用verilog實現圖像的二維濾波器。輸入輸出圖像分辨率1920x1080,8bit,YUV422。濾波器為3*3,系數8bit有符號數。濾波操作只針對Y進行處理,UV直通。
088.
用verilog實現MAC單元:輸入32路數據A,32路數據B,都是8bit有符號數。輸出32路A乘以B的累加和。
089.
用verilog實現激活函數ReLU,輸入為16bit有符號數。
090.
用verilog實現激活函數sigmoid:f(x) = 1/(1+e^-x),輸入x為16bit有符號數。
091.
用verilog實現max pooling函數,kernel 7x7,數據16bit有符號數。
092.
用verilog實現排序算法。輸入數據為128個16bit有符號數。
093.
用verilog實現一個APB接口的單口RAM,深度1024,位寬32bit。
094.
用verilog實現一個AHB接口的單口RAM,深度1024,位寬32bit。
095.
用verilog實現一個AXI接口的單口RAM,深度1024,位寬32bit。
096.
解釋一下DMA控制器的基本功能與實現。
097.
使用verilog開發項目需要用到哪些工具?
098.
使用verilog實現APB接口的I2C模塊,兼容標准協議。
099.
舉例說明3條使用verilog開發項目的經驗或教訓。
聲明:轉自微信公眾號。
