剛剛接觸fpga。請大神幫忙解釋下面這段Verilog HDL語言的意思

時間 2021-05-07 20:00:56

1樓:匿名使用者

always @ (posedge link_clk)begin

case(count[2:0])

3'd0:begin // cnout 為0 的時候,下面兩個暫存器為0

adc_a_mclk <= 1'b0;

adc_a_sclk <= 1'b0;

end3'd1:begin // cnout 為1的時候,下面兩個暫存器為0

adc_a_mclk <= 1'b0;

adc_a_sclk <= 1'b0;

end3'd2:begin// cnout 為2的時候,adc_a_mclk為1,adc_a_sclk為0 同時更新

// a_d_r1 a_d_r2 暫存器的值

adc_a_mclk <= 1'b1;

adc_a_sclk <= 1'b0;

a_d_r1 <= data_rx1; // rs data

a_d_r2 <= data_rx2;

end3'd3:begin// cnout 為1的時候,adc_a_mclk為1,adc_a_sclk為0

adc_a_mclk <= 1'b1;

adc_a_sclk <= 1'b0;

end綜上 adc_a_mclk 類似一個4分頻時鐘,同時在 count為2的時候,鎖存了兩個暫存器的值

adc_a_sclk 貌似沒用到

2樓:匿名使用者

always @ (posedge link_clk)begin //link_clk上升沿時

case(count[2:0])

3'd0:begin //當count=0時,adc_a_mclk <= 1'b0;adc_a_sclk <= 1'b0;

adc_a_mclk <= 1'b0;

adc_a_sclk <= 1'b0;

end3'd1:begin //當count=0時,adc_a_mclk <= 1'b0;adc_a_sclk <= 1'b0;

adc_a_mclk <= 1'b0;

adc_a_sclk <= 1'b0;

end3'd2:begin //當count=0時,adc_a_mclk <= 1'b1;adc_a_sclk <= 1'b0;data_rx1賦值給a_d_r1,data_rx2賦值給a_d_r2

adc_a_mclk <= 1'b1;

adc_a_sclk <= 1'b0;

a_d_r1 <= data_rx1; // rs data

a_d_r2 <= data_rx2;

end3'd3:begin //當count=0時,adc_a_mclk <= 1'b1;adc_a_sclk <= 1'b0;

adc_a_mclk <= 1'b1;

adc_a_sclk <= 1'b0;end

請大神幫忙解釋,veriloghdl語言 5

求veriloghdl語言大神,解釋一下程式意思,最好能每行註釋一下,感激不盡。

3樓:

module hdlc(rxd,rxclk,rxset,txclk,txd,txds); //module 頭,verilog 95風格

input rxd; //輸入訊號

input rxclk; //輸入時鐘

input rxset; //輸入的復位訊號

output[7:0]txd; //輸出的資料,8bit

reg [7:0]txd; //輸出暫存器

output[2:0]txds; //輸出訊號

reg [2:0]txds; //輸出寄存

output txclk; //輸出的時鐘

reg txclk; //輸出時鐘寄存

reg rxd_d1; //輸入的資料暫存器。單位元

reg rxd_d2;

reg rxd_d3;

reg rxd_d4;

reg rxd_d5;

reg rxd_d6;

reg rxd_d7;

reg rxd_d8; //輸入的資料暫存器。單位元

//在接收rxclk下,每個時候域接收rxd資料,寄存一級

always @(posedge rxclk or negedge rxset)

if(!rxset)

rxd_d1<=1'b0;

else rxd_d1<=rxd;

//在接收rxclk下,每個時候域接收rxd資料,寄存二級,即打兩拍

always @(posedge rxclk or negedge rxset)

if(!rxset)

rxd_d2<=1'b0;

else rxd_d2<=rxd_d1;

//寄存**,即打三拍

always @(posedge rxclk or negedge rxset)

if(!rxset)

rxd_d3<=1'b0;

else rxd_d3<=rxd_d2;

always @(posedge rxclk or negedge rxset)

if(!rxset)

rxd_d4<=1'b0;

else rxd_d4<=rxd_d3;

always @(posedge rxclk or negedge rxset)

if(!rxset)

rxd_d5<=1'b0;

else rxd_d5<=rxd_d4;

always @(posedge rxclk or negedge rxset)

if(!rxset)

rxd_d6<=1'b0;

else rxd_d6<=rxd_d5;

always @(posedge rxclk or negedge rxset)

if(!rxset)

rxd_d7<=1'b0;

else rxd_d7<=rxd_d6;

//寄存8級,即打8拍,

always @(posedge rxclk or negedge rxset)

if(!rxset)

rxd_d8<=1'b0;

else rxd_d8<=rxd_d7;

////////////////////search for 01111110 indacation/////////////////

reg [2:0]l_cs,l_ns; //定義2個3bit的狀態訊號,當前態l_cs,下一個狀態l_ns

//3bit的原因在於需要選擇的資料為0~7,只需3bit

parameter s_hunt=3'd0,s0=3'd1,s1=3'd2,s2=3'd3,s3=3'd4,s4=3'd5,s5=3'd6,s6=3'd7;

//定義初始態s_hunt=0』

//否則選擇將下一個狀態l_ns賦給當前態l_cs

always @(posedge rxclk or negedge rxset)

if(!rxset)

l_cs<=s_hunt;

else l_cs<=l_ns;

//下面的狀態機用於尋找序列"0111111"

//如果找到當前的要尋找的輸入數,則跳入到下一個狀態,否則跳到s0態,開始新一輪的尋找,

//通過這種方法尋找到所需要的序列「01111110」

always @(l_cs or rxd)

case(l_cs)

s_hunt:begin

if(rxd==1'b0)

l_ns=s0;

else l_ns=s_idle;

ends0:begin

if(rxd==1'b1)

l_ns=s1;

else l_ns=s0;

ends1:begin

if(rxd==1'b1)

l_ns=s2;

else l_ns=s0;

ends2:begin

if(rxd==1'b1)

l_ns=s3;

else l_ns=s0;

ends3:begin

if(rxd==1'b1)

l_ns=s4;

else l_ns=s0;

ends4:begin

if(rxd==1'b1)

l_ns=s5;

else l_ns=s0;

ends5:begin

if(rxd==1'b1)

l_ns=s6;

else l_ns=s0;

ends6:l_ns=s_idle;

endcase

//定義了暫存器se_ind,

//該部分邏輯為組合邏輯,當找到所需要找的序列「01111110」時,輸出se_ind為1,否則為0;

//該訊號相當於一個指示訊號。是否找到所需的序列

reg se_ind;

always @(l_cs or rxd)

if(l_cs==s6 && rxd==1'b0)

se_ind=1'b1;

else se_ind=1'b0;

verilog hdl語言釋義

4樓:heart阿飛

那是因為你之前肯定學了c語言之類的軟體設計語言,具體的電路如何聯絡起來?

首先,思想轉變,邏輯語句都是並行的觸發的,是由暫存器和閘電路組成的你需要先熟悉各個基本的邏輯單元的構成,比如:d觸發器,基本的閘電路,比如:或門,與門,等;嘗試用基本的閘電路來搭建電路,照著你搭建的電路來用veriloghdl語言來描述出來;

同理,當你對這些基本閘電路都比較瞭解了,你可以根據verilog**來手動繪出電路,

如此,你就不會帶隊電路感到陌生了。。。

我剛剛接觸佛教,請了幾本經書,這些經書每天每本都要讀嗎,還是隻讀一本就行啊

冥想音主站 學佛不能自學,佛理深奧,一旦理解錯誤,生出邪知邪見,就不好辦了。佛教中,各個宗門修行方式都不一樣,所以儘量有善知識引領修學,到寺廟中請出家師教授都可以,像你這樣問,一旦遇到邪師說法,就會斷了你的慧命。 超級藍水海軍 你沒有時間,就慢慢看。不一定每天都要讀的。有時間了,就看一下,學習一下。...

我剛剛接觸魔獸世界這個遊戲,請問各位老玩家,我該玩什麼樣的職業

既然是為了ctm。那向你推薦獵人和盜賊兩個職業。盜賊是近戰,獵人是遠端。你想pve的同時pvp的話玩盜賊,想pve的話建議你玩獵人。dps第一的職業。而且獵人對於新手來說很簡單升級也是最快的職業。如果可以的話,聯盟玩狼人獵人和暗夜精靈獵人,部落玩巨魔獵人和血精靈獵人。盜賊方面聯盟建議玩人類,暗夜和狼...

本人剛剛接觸社會找到一份月薪3000的工作但是

顧問 月薪就是以自然月為週期的工資計算方式,工作工時則必需符合勞動法等相關法律法規,企業不能自定義,只能在法定條件下進行安排。依法,每週工作40小時,每年工作天數為250天,月平均為20.83天,每年法定假11天是帶薪的,所以月平均計薪天數為21.75天。你每週休息一天,如果每天工作8小時,那麼每週...