国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

對(duì)C語言編程者的Verilog開發(fā)指南實(shí)例

發(fā)布時(shí)間:2010-10-15 20:05    發(fā)布者:techshare
本文舉例說明了如何用軟件實(shí)現(xiàn)脈寬調(diào)制(PWM),如何將該設(shè)計(jì)轉(zhuǎn)換成一個(gè)可以在FPGA中運(yùn)行的邏輯塊,并能利用存儲(chǔ)器映射I/O接口通過軟件完成對(duì)該邏輯塊的控制。通過理解本文討論的概念和內(nèi)容,沒有太多硬件知識(shí)的軟件開發(fā)人員也能掌握在FPGA上開發(fā)硬件的技能。

在不遠(yuǎn)的將來,嵌入式系統(tǒng)設(shè)計(jì)師將能夠根據(jù)哪個(gè)更有利于解決設(shè)計(jì)問題來自由選擇硬件和軟件方案。但直到現(xiàn)在,對(duì)于那些想學(xué)習(xí)硬件設(shè)計(jì)的軟件工程師來說不少障礙仍然很難逾越。由于硬件描述語言和編程語言非常相似,因此最終這些障礙會(huì)消失。另外,市場(chǎng)上已有好幾種低成本的演示板,上面包含現(xiàn)場(chǎng)可編程門陣列 (FPGA)、微處理器以及相應(yīng)工具,軟件開發(fā)人員可以借此來學(xué)習(xí)硬件設(shè)計(jì)。

本文舉例說明了一個(gè)使用FPGA的新設(shè)計(jì)流程,我們從中可以知道如何用軟件實(shí)現(xiàn)PWM,然后如何將該設(shè)計(jì)轉(zhuǎn)換成一個(gè)可以在FPGA中運(yùn)行的邏輯塊,并能利用存儲(chǔ)器映射I/O接口通過軟件完成對(duì)該邏輯塊的控制。

軟硬件劃分

現(xiàn)在的情況與以前有所不同,軟件工程師能夠方便地參與到硬件設(shè)計(jì)中。不管是硬件模塊還是軟件模塊現(xiàn)在都可以用編程語言進(jìn)行設(shè)計(jì)。眾所周知,C語言是嵌入式軟件設(shè)計(jì)的通用語言。在硬件設(shè)計(jì)方面,verilog則是流行的選擇(用VHDL的人也很多)。Verilog的語法和結(jié)構(gòu)與C編程語言非常相似,從本文的例子中也可以看到這一點(diǎn)。

同時(shí),硬件的升級(jí)和修改也變得越來越方便。以前可以通過下載新的可執(zhí)行映像文件升級(jí)軟件,但對(duì)硬件卻行不通。現(xiàn)在情況不同了。就像軟件開發(fā)人員能夠快速編輯、重新編譯、然后將新代碼下載到存儲(chǔ)器那樣,使用可編程邏輯器件的硬件設(shè)計(jì)者也能做類似的事情。可編程邏輯改變了嵌入式系統(tǒng)的設(shè)計(jì)方法,設(shè)計(jì)者可以像修改軟件那樣方便地修改硬件。換句話說,在設(shè)計(jì)和調(diào)試階段,設(shè)計(jì)者能夠靈活選擇軟件方式或硬件方式來作為完成任務(wù)的最佳方式。

設(shè)計(jì)者無需太多的硬件知識(shí)就可以利用FPGA供應(yīng)商提供的工具輕松地開發(fā)出可編程邏輯嵌入式系統(tǒng)。例如,Altera公司的SOPC Builder能幫助系統(tǒng)設(shè)計(jì)師從已有的庫中選擇和配置外圍電路,并增加用來創(chuàng)建和連接外圍電路的用戶邏輯。加上一些可編程邏輯和硬件知識(shí),軟件工程師就能夠充分利用硬件的優(yōu)勢(shì)改進(jìn)他們的系統(tǒng)。

PWM軟件

PWM控制器會(huì)產(chǎn)生一連串脈沖。通常需要規(guī)定脈沖的周期和寬度。占空比被定義為脈沖寬度與周期的比值。PWM有著廣泛的應(yīng)用,大多數(shù)情況下用于控制模擬電路。因?yàn)閿?shù)字信號(hào)連續(xù)變化的速率相對(duì)較快(當(dāng)然取決于信號(hào)周期),因此最終會(huì)形成一個(gè)用來控制模擬設(shè)備的平均電壓值。當(dāng)PWM脈沖流應(yīng)用于馬達(dá)時(shí),馬達(dá)的轉(zhuǎn)速就能正比于占空比(從0%到100%)。如果占空比增加,馬達(dá)轉(zhuǎn)速就會(huì)提高,反之,如果占空比減小,馬達(dá)的轉(zhuǎn)速隨之也會(huì)降低。

用軟件編寫這樣一個(gè)PWM控制器是相對(duì)比較容易的任務(wù),但它有助于我們簡(jiǎn)明扼要地描述如何用Verilog設(shè)計(jì)硬件。清單1給出了PWM的C代碼。

清單1:完全用軟件實(shí)現(xiàn)的位脈沖PWM控制器。

void

pwmTask(uint32_t pulse_width, uint32_t period)

{

uint32_t time_on=pulse_width;

uint32_t time_off=period-pulse_width;

while (1)

{

pwm_output=1;

sleep(time_on);

pwm_output=0;

sleep(time_off);

}

}

根據(jù)脈寬(pulse_width)和周期(period)參數(shù)值,計(jì)算出輸出為高電平和低電平的時(shí)間。接下來將輸出引腳置為高電平,并等待 time_on設(shè)定的時(shí)間值之后,將輸出變?yōu)榈碗娖剑⒌却齮ime_off參數(shù)設(shè)定的時(shí)間值。下個(gè)周期再重復(fù)這樣的過程,并無限循環(huán)下去。

Verilog模塊

清單2給出了一個(gè)簡(jiǎn)單的Verilog模塊,實(shí)現(xiàn)帶異步復(fù)位功能的8位寬寄存器。寄存器的輸入“in”在時(shí)鐘的上升沿被賦值到輸出“out”,直到clr_n復(fù)位信號(hào)的下降沿到來(此時(shí)輸出將被賦值為0)。

清單2:實(shí)現(xiàn)帶異步復(fù)位功能8位寬寄存器的Verilog編寫模塊。

module simple_register(in, out, clr_n, clk, a);

//端口聲明

input

input

input [7:0]

input

output [7:0]

clr_n;

clk;

in;

a;

out;

//信號(hào)聲明

reg [7:0]

wire

out;

a;

//實(shí)現(xiàn)帶異步清除的寄存器

always @(posedge clk or negedge clr_n)

begin

if (clr_n==0) // could also be written if (!clr_n)

out<=0;

else

out<=in;

end

//連續(xù)賦值

assign a=!out[0];

endmodule

粗略地看verilog與C語言有許多相似之處。分號(hào)用于結(jié)束每個(gè)語句,注釋符也是相同的(/* ... */和// 都是熟悉的),運(yùn)算符“==”也用來測(cè)試相等性。Verilog的if..then..else語法與C語言的也非常相似,只是Verilog用關(guān)鍵字 begin和end代替了C的大括號(hào)。事實(shí)上,關(guān)鍵字begin和end對(duì)于單語句塊來說是可有可無的,就與C中的大括號(hào)用法一樣。Verilog和C都對(duì)大小寫敏感。

當(dāng)然,硬件和軟件的一個(gè)重要區(qū)別是它們的“運(yùn)行”方式。硬件設(shè)計(jì)中用到的許多單元都是并行工作的。一旦設(shè)備電源開啟,硬件的每個(gè)單元就會(huì)一直處于運(yùn)行狀態(tài)。雖然根據(jù)具體的控制邏輯和數(shù)據(jù)輸入,設(shè)備的一些單元可能不會(huì)改變它們的輸出信號(hào),但它們還是一直在“運(yùn)行”中。

相反,在同一時(shí)刻整個(gè)軟件設(shè)計(jì)中只有一小部分(即使是多軟件任務(wù)也只有一個(gè)任務(wù))在執(zhí)行。如果只有一個(gè)處理器,同一時(shí)間點(diǎn)只能有一條指令在執(zhí)行。軟件的其它部分可以被認(rèn)為處于休眠狀態(tài),這與硬件有很大的不同。變量可能以一個(gè)有效值而存在,但大多數(shù)時(shí)間里它們都不在使用狀態(tài)。

軟硬件的不同行為會(huì)直接導(dǎo)致硬件和軟件代碼編程方式的不同。軟件是串行執(zhí)行的,每一行代碼的執(zhí)行都要等到前一行代碼執(zhí)行完畢后才能進(jìn)行(中斷的非線性或操作系統(tǒng)的命令除外)。

//-------------------------------------------------------------------------------------------------------------

一個(gè)Verilog模塊的開頭是關(guān)鍵字module,緊跟其后的是模塊名稱和端口列表,端口列表列出了該模塊用到的所有輸入輸出名稱。接下來是端口聲明部分。注意:所有的輸入輸出既出現(xiàn)在模塊第一行的端口列表中,也會(huì)出現(xiàn)在端口聲明(declaration)部分中。

在Verilog中有二種類型的內(nèi)部信號(hào)用得比較多,它們是reg和wire。它們具有不同的功能。所有端口都有一個(gè)名稱相同且聲明為wire 的信號(hào)。因此連線line被聲明為wire不是必要的。reg會(huì)保持上次的賦值,因此不需要每次都進(jìn)行驅(qū)動(dòng)。wire型信號(hào)用于異步邏輯,有時(shí)也用來連接信號(hào)。因?yàn)?reg可以保持上次的值,因此輸入不能被聲明為reg類型。在Verilog模塊中可以在任何時(shí)候異步地將輸入改變?yōu)槿魏问录eg和wire的主要區(qū)別是,reg類型的信號(hào)只能在過程塊(后面會(huì)談到)中賦值,而wire類型的信號(hào)只能在過程塊外賦值。這兩種信號(hào)類型都可以出現(xiàn)在過程塊內(nèi)部和外部的賦值運(yùn)算符右邊。

使用關(guān)鍵字reg并不一定意味著編譯器會(huì)創(chuàng)建一個(gè)寄存器,理解這一點(diǎn)是非常重要的。清單2的代碼中有一個(gè)reg類型8位寬的內(nèi)部信號(hào)out。該模塊使用寄存器源于always模塊(過程塊的一種)的編程方式。值得注意的是,信號(hào)a是一個(gè)wire類型,因此只能在連續(xù)賦值(continuous assignment)語句中賦值,而reg類型的out信號(hào)只能在always塊中賦值。

always塊是過程塊的一種,僅在某種變化發(fā)生時(shí)用于更新信號(hào)。always語句圓括號(hào)里的表達(dá)式組被稱為敏感列表,格式是:(表達(dá)式or表達(dá)式…)

只要敏感列表中的任何一個(gè)表達(dá)式值為真,always塊中的代碼就會(huì)被執(zhí)行。Verilog中用于上升沿和下降沿的關(guān)鍵字分別是posedge 和 negedge。這二個(gè)關(guān)鍵字經(jīng)常被用于敏感列表。在本例中,如果clk信號(hào)的上升沿或clr_n的下降沿信號(hào)發(fā)生時(shí),always塊內(nèi)部的語句就會(huì)被執(zhí)行。

為了用好寄存器,輸出必須在時(shí)鐘的上升沿得到更新(下降沿也可以,但上升沿更常見些)。增加negedge clr_n會(huì)使寄存器在clr_n信號(hào)的下降沿復(fù)位。但并不是所有的敏感列表都會(huì)包含關(guān)鍵字posedge或negedge,因此在實(shí)際硬件中并不總是存在真實(shí)的寄存器。

always塊內(nèi)的第一條語句判斷clr_n信號(hào)的上升沿有沒有發(fā)生。如果有,下一行代碼把out置為0。這些代碼行實(shí)現(xiàn)了寄存器的異步復(fù)位功能。如果條件語句是:if(negedge clr_n and clk==1),那么該語句實(shí)現(xiàn)的就是基于時(shí)鐘的異步復(fù)位。

讀者可能已經(jīng)注意到,always塊中的賦值運(yùn)算符與以關(guān)鍵字assign開頭的連續(xù)賦值語句中用到的運(yùn)算符不一樣。"<="運(yùn)算符用于非阻塞性(nonblocking)賦值,而"="運(yùn)算符用于阻塞性(blocking)賦值。

在一組阻塞性賦值語句中,在下一個(gè)阻塞性賦值語句執(zhí)行前需要計(jì)算并賦值第一個(gè)賦值語句。這一過程就象C語言中語句的順序執(zhí)行。而非阻塞語句在執(zhí)行時(shí),所有賦值語句的右邊被同時(shí)計(jì)算和賦值。連續(xù)賦值語句必須使用阻塞賦值語句(否則編譯器會(huì)報(bào)錯(cuò))。

為了減少代碼出錯(cuò)的概率,建議在順序邏輯(例如希望以寄存器方式實(shí)現(xiàn)的邏輯)always塊中的所有賦值語句使用非阻塞性賦值語句。大多數(shù) always塊應(yīng)該使用非阻塞性賦值語句。如果always塊都是組合邏輯,那么就需要使用阻塞性賦值語句。

//-------------------------------------------------------------------------------------------------------------

PWM硬件

編寫存儲(chǔ)器映射硬件模塊的首要任務(wù)是以軟件方式?jīng)Q定寄存器映射圖。在PWM案例中,一般設(shè)計(jì)師希望能用軟件設(shè)置周期和脈寬。在硬件設(shè)計(jì)中用計(jì)數(shù)器統(tǒng)計(jì)系統(tǒng)時(shí)鐘周期數(shù)是非常容易的。因此要用到兩個(gè)寄存器,分別命名為pulse_width和period,并且都在時(shí)鐘周期內(nèi)度量。表1給出了PWM 的寄存器映射圖。

為了確定輸出信號(hào),硬件可簡(jiǎn)單地通過將period和pulse_width寄存器內(nèi)容作為運(yùn)行中的計(jì)數(shù)器保持的輸出。

接下來要為PWM選擇端口,大多數(shù)端口可以依據(jù)總線架構(gòu)而定。表2提供了通用存儲(chǔ)器映射PWM的信號(hào)描述概要。通常為低電平有效的信號(hào)命名做法是在信號(hào)名上加“_n”,對(duì)于控制信號(hào)更是如此。表2中的write_n和clr_n信號(hào)就是低電平有效的信號(hào)(下降沿觸發(fā))。

至此我們已經(jīng)定義好了硬件模塊的接口,接下來就可以開始編寫verilog代碼了。清單3給出了一個(gè)實(shí)現(xiàn)例子。

清單3:用Verilog實(shí)現(xiàn)的PWM硬件。

module pwm (clk, write_data, cs, write_n, addr, clr_n, read_data, pwm_out);

input

input [31:0]

input

input

input

input

output [31:0]

output

clk;

write_data;

cs;

write_n;

addr;

clr_n;

read_data;

pwm_out;

reg [31:0]

reg [31:0]

reg [31:0]

reg

reg [31:0]

wire

period;

pulse_width;

counter;

off;

read_data;

period_en, pulse_width_en; //寫使能

// 定義period和pulse_width寄存器的內(nèi)容

always @(posedge clk or negedge clr_n)

begin

if (clr_n==0)

begin

period<=32''h 00000000;

pulse_width<=32''h 00000000;

end

else

begin

if (period_en)

period<=write_data[31:0];

else

period<=period;

if (pulse_width_en)

pulse_width<=write_data[31:0];

else

pulse_width<=pulse_width;

end

end

// period和pulse_width寄存器的讀訪問

always @(addr or period or pulse_width)

if (addr == 0)

read_data=period;

else

read_data=pulse_width;

always @(posedge clk or negedge clr_n)

begin

if (clr_n==0)

counter<=0;

else

if (counter>=period-1)

counter<=0;

else

counter<=counter+1;

end

always @(posedge clk or negedge clr_n)

begin

if (clr_n==0)

off<=0;

else

if (counter>=pulse_width)

off <= 1;

else

if (counter==0)

off<=0;

else

off<=off;

end

assign period_en = cs & !write_n & !addr;

assign pulse_width_en = cs & !write_n & addr;

//PWM輸出

assign pwm_out=!off;

endmodule

首先是端口說明,接著是內(nèi)部信號(hào)說明。構(gòu)成PWM軟件控制接口的存儲(chǔ)器映射型寄存器被聲明為reg。該代碼行只允許以32位的方式訪問這些存儲(chǔ)器映射型寄存器。如果需要8位或16位訪問,就必須將寄存器分割成4個(gè)8位寄存器,并增加字節(jié)使能信號(hào)邏輯。用verilog代碼實(shí)現(xiàn)這一功能是非常簡(jiǎn)單的。 always塊中已賦過值的所有信號(hào)都被聲明為reg類型。聲明為wire類型的信號(hào)是period和pulse_width寄存器寫入使能信號(hào)。這些信號(hào)使用連續(xù)賦值語句進(jìn)行賦值。

清單的余下部分即是實(shí)際的代碼,共有4個(gè)always塊,最后還有幾個(gè)賦值語句。每個(gè)always塊描述一個(gè)信號(hào)或一組有相同基本行為(換句話說,使用相同的控制邏輯)的信號(hào)的行為。這是使代碼具有可讀性并能減少錯(cuò)誤的Verilog代碼編寫風(fēng)格。所有的always塊都有復(fù)位邏輯,當(dāng) clr_n信號(hào)被證實(shí)(設(shè)為0)時(shí),復(fù)位邏輯將信號(hào)置為0。雖然這樣做并不是嚴(yán)格必需的,但這是一種良好的設(shè)計(jì)習(xí)慣,能使每個(gè)信號(hào)在復(fù)位時(shí)都有確定的值。

第一個(gè)always塊描述了寄存器映射中的寄存器行為。當(dāng)正確的使能信號(hào)被證實(shí)時(shí),write_data寄存器值就被寫入period或 pulse_width寄存器中。這是改變?nèi)我患拇嫫髦档奈ㄒ煌緩健T撐募撞康倪B續(xù)賦值語句定義了寫入使能信號(hào)。當(dāng)主寫入使能信號(hào)和芯片選擇信號(hào)同時(shí)被證實(shí)時(shí),period和pulse_width寄存器的寫入使能信號(hào)就被證實(shí),此時(shí)period和pulse_width的地址位應(yīng)分別被置為0和1。

第二個(gè)always塊定義了寄存器映射圖中讀寄存器。Period寄存器位于外圍電路的基本地址處,pulse_width寄存器在后面32位字地址處。

第三和第四個(gè)always塊一起來決定PWM的輸出。第三個(gè)always塊實(shí)現(xiàn)計(jì)數(shù)器功能,它連續(xù)計(jì)數(shù)到period寄存器設(shè)置的值時(shí)復(fù)位到 0,然后重新開始計(jì)數(shù)。第四個(gè)always塊對(duì)該計(jì)數(shù)器值與pulse_width寄存器值進(jìn)行比較,當(dāng)計(jì)數(shù)器值小于pulse_width值時(shí),PWM 輸出保持高電平,否則設(shè)為低電平。

需要牢記的是不管在何種條件下每個(gè)信號(hào)都必須有明確的值。回顧一下硬件的基本行為特征——“始終在運(yùn)行”。例如在最后一個(gè)always塊(描述 off信號(hào)的那個(gè)塊)中,代碼的最后行將off賦于它本身。最初看來好象比較奇怪,但如果沒有這一行的話,off值將是不確定的。對(duì)這一情況保持跟蹤的最方便途徑是確保每次信號(hào)會(huì)在if語句中賦值,在相應(yīng)的else語句中也賦值。

軟件訪問

現(xiàn)在硬件完成了,可以利用寄存器映射圖中的寄存器通過軟件對(duì)PWM實(shí)施控制。讀者可以用一個(gè)簡(jiǎn)單的帶指針的數(shù)據(jù)結(jié)構(gòu)連接PWM中的寄存器。

typedef volatile struct

{

uint32_t period;

uint32_t pulse_width;

} PWM;

例如,可以將PWM連接到LED。先初始化一個(gè)名為pLED、類型為PWM*的變量,將其指向PWM基地址。這樣做實(shí)際上是將硬件抽象進(jìn)了一個(gè)數(shù)據(jù)結(jié)構(gòu)。向pLED->period寫入數(shù)據(jù)會(huì)設(shè)置或改變period值,向pLED->pulse_width寫入數(shù)據(jù)將改變占空比,并導(dǎo)致LED 的亮度增加或減少。如果使用的是閃爍型LED,只需把周期變長(zhǎng),讓肉眼清晰辨別開和關(guān)的周期即可。

清單3所示的verilog PWM實(shí)現(xiàn)在本例中是作為Altera的Nios處理器系統(tǒng)的外圍電路進(jìn)行測(cè)試的,可以利用前文所述的C結(jié)構(gòu)通過軟件對(duì)它訪問。Altera的SOPC Builder創(chuàng)建了宏,可以使ModelSim(明導(dǎo)資訊公司的一個(gè)硬件仿真器)中的協(xié)同仿真。在系統(tǒng)執(zhí)行C代碼時(shí)可以利用ModelSim仿真器觀察到PWM信號(hào)以及其它系統(tǒng)信號(hào)的行為。

清單4給出了用于產(chǎn)生圖1所示PWM波形的C代碼。C代碼向PWM寄存器寫入數(shù)據(jù),創(chuàng)建出周期為5個(gè)時(shí)鐘周期、脈寬為4個(gè)時(shí)鐘周期的PWM輸出信號(hào)。請(qǐng)注意在波形的開始處,由于period和pulse_width寄存器都被寫入了數(shù)據(jù),cs和wr_n信號(hào)被證實(shí)了二次(在寫period寄存器時(shí)地址信號(hào)為低電平,在寫pulse_width寄存器時(shí)地址信號(hào)變成了高電平)。

清單4:用于產(chǎn)生圖1所示PWM波形的測(cè)試軟件。

void

main(void)

{

PWM * const pLED=...

pLED->period=5;

pLED->pulse_width=4;

asm("nop");

asm("nop");

asm("nop");

pLED->pulse_width=2;

}

在寄存器中寫入新值后,pwm_output信號(hào)開始反映出變化。然后,只加入一些時(shí)延我們?cè)倏摧敵觯恍㎞OP指令被C代碼執(zhí)行了。最終,脈寬變?yōu)?個(gè)周期,PWM波形相應(yīng)也有了變化,但周期仍保持為5個(gè)時(shí)鐘周期。

設(shè)計(jì)嵌入式系統(tǒng)架構(gòu)時(shí)最好將系統(tǒng)分成硬件和軟件二大模塊,以便充分利用各自的優(yōu)勢(shì)。隨著開發(fā)工具的不斷發(fā)展,軟件和硬件模塊的相互交換也變得越來越透明。

一旦充分理解了本文討論的概念和內(nèi)容,也就掌握了在FPGA上開發(fā)硬件的技能。FPGA能被用作微處理器系統(tǒng)中的一個(gè)存儲(chǔ)器映射式外圍電路,可以通過簡(jiǎn)單的編程實(shí)現(xiàn)接口。由于用硬件實(shí)現(xiàn)算法的速度快得多,將算法從軟件轉(zhuǎn)換成硬件可以極大地提高系統(tǒng)性能。這就是人們常說的硬件加速,掌握這一技術(shù)是熟練使用可編程邏輯器件中被有效實(shí)現(xiàn)的可配置處理器的關(guān)鍵。從長(zhǎng)遠(yuǎn)來看,即使是軟件工程師也能通過硬件加速提高系統(tǒng)性能和效率。
本文地址:http://m.qingdxww.cn/thread-32638-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • Chiptorials ——如何將CryptoAuthLib庫用于Microchip安全身份驗(yàn)證IC
  • Chiptorials ——使用ATECC608 TrustFLEX實(shí)現(xiàn)基本非對(duì)稱身份驗(yàn)證
  • Chiptorials——如何使用ATECC608 TrustFLEX實(shí)現(xiàn)公鑰輪換
  • FPGA設(shè)計(jì)流程培訓(xùn)教程
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 狠狠操狠狠操狠狠操 | 美国黑人一级毛片免费看的 | 韩国理论片妈妈的朋友 | 久久天天躁夜夜躁狠狠躁2020 | 国产女精品| 污污视频网站免费在线观看 | 精品国产免费福利片 | 亚洲 欧美 日韩 另类 | 中文字幕一区精品 | 成人午夜无人区一区二区 | 国产日韩欧美中文字幕 | 一区二区三区视频 | 视频一本大道香蕉久在线播放 | 四虎永久视频 | 天天操天天插天天干 | 久草视频一区 | 亚洲高清在线看 | 69视频在线下载 | 国产精品青青青高清在线观看 | 精品视频 九九九 | 青青操国产| 国产1024在线永久免费观看 | 欧美va在线观看 | 免费视频一区二区 | 四虎网站在线播放 | 国产欧美一区二区三区视频 | xx欧美| 日日拍夜夜拍 | 精品无人区一区二区三区a 精品无人区麻豆乱码1区2区 | 这里精品 | 香蕉久久久| 久久久噜噜噜www成人网 | 一级做a爰片性色毛片黄书 一级做a爰片欧美一区 | 亚洲va国产日韩欧美精品色婷婷 | 国产成人亚洲综合在线 | 亚洲欧美日本欧美在线播放污 | 天堂素人在线 | 久热久色| 5566精品资源在线播放 | 日本三级网站在线观看 | 日韩一级免费视频 |