国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Verilog學(xué)習(xí)二:設(shè)計(jì)一個(gè)一位全加器

這篇具有很好參考價(jià)值的文章主要介紹了Verilog學(xué)習(xí)二:設(shè)計(jì)一個(gè)一位全加器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

本部分將不再介紹Vivado工程的整體流程,將主要精力放在代碼上面,具體的流程可參考:https://blog.csdn.net/crodemese/article/details/130438348
本部分代碼也已上傳到github:https://github.com/linxunxr/VerilogStudy

1. 全加器

那么什么是全加器呢?我們都知道加法,即1+1=2,當(dāng)個(gè)位數(shù)相加大于9時(shí)就需要進(jìn)位。在二進(jìn)制中也是如此,因此,一位二進(jìn)制的相加的真值表便如下圖:

a b sum count
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

圖中a、b為輸出,sum為相加的結(jié)果,count為進(jìn)位,即當(dāng)輸入都為1時(shí),相加的結(jié)果為0,進(jìn)位信號(hào)輸出1。這就是一個(gè)一位半加器。而全加器就是在此基礎(chǔ)上再加一個(gè)輸入,這個(gè)輸入用來獲取前一個(gè)的進(jìn)位信號(hào),其真值表如下圖:

count a b sum count
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1

這就是一個(gè)全加器的真值表。

2. 設(shè)計(jì)思路

我們都知道Verilog最大的特點(diǎn)就是自頂向下的設(shè)計(jì)方式,因此我們嘗試對(duì)上面的全加器進(jìn)行模塊劃分,即使用兩個(gè)半加器和一個(gè)或門來實(shí)現(xiàn),其模塊如下圖:

這樣就可以實(shí)現(xiàn)一個(gè)一位全加器。

3. 模塊化實(shí)現(xiàn)

  1. 首先我們來實(shí)現(xiàn)一個(gè)簡(jiǎn)單的或門模塊,其具有兩輸入一輸出,因此在module命名中對(duì)其定義輸入a b輸出c,然后將ab進(jìn)行或運(yùn)算并賦值給c,如下:
// 或門模塊
module or_gate (
    input a,
    input b,
    output c
);
    // 或運(yùn)算 
    assign c = a | b;
endmodule
  1. 接下來我們來實(shí)現(xiàn)較為復(fù)雜的半加器,其具有兩輸入兩輸出,通過我們上面對(duì)半加器真值表的觀察可知,輸出的相加信號(hào)可視為兩輸入信號(hào)的異或運(yùn)算,輸出的進(jìn)位信號(hào)可視為兩輸入信號(hào)的與運(yùn)算,因此實(shí)現(xiàn)如下:
// 半加器模塊
module half_adder (
    input a,
    input b,
    output sum,
    output carry
);
    // 異或運(yùn)算完成相加
    assign sum = a ^ b;
    // 與運(yùn)算完成進(jìn)位
    assign carry = a & b;
endmodule
  1. 接下來就是根據(jù)設(shè)計(jì)思路通過對(duì)半加器模塊和或門模塊的引用來完成一位全加器的頂層模塊設(shè)計(jì):
  2. 其基本語法仍然是賦值語句,只不過多了運(yùn)算符的操作,與C語言類似,Verilog也有多種運(yùn)算符(默認(rèn)具有C語言基礎(chǔ),僅對(duì)與C語言不同的進(jìn)行解釋):
    1. 算數(shù)運(yùn)算符:
      1. +:加法運(yùn)算符,或正值運(yùn)算符
      2. -:減法運(yùn)算符,或負(fù)值運(yùn)算符
      3. *:乘法運(yùn)算符
      4. /:除法運(yùn)算符
      5. %:模運(yùn)算符
    2. 位運(yùn)算符:
      1. ~:取反
      2. &:按位與
      3. |:按位或
      4. ^:按位異或
      5. ^~:按位同或
    3. 邏輯運(yùn)算符:
      1. &&:邏輯與
      2. ||:邏輯或
      3. !:邏輯非
    4. 關(guān)系運(yùn)算符:
      1. <:小于
      2. >:大于
      3. <=:小于等于
      4. >=:大于等于
    5. 等式運(yùn)算符:
      1. ==:等于
      2. !=:不等于
      3. ===:等于,與上面的等于不同的是,這里的等于對(duì)兩個(gè)操作數(shù)的要求是嚴(yán)格的,即對(duì)不定值x和高阻值z也會(huì)進(jìn)行比較,只有兩端嚴(yán)格相等時(shí)其結(jié)果才為1,因此其結(jié)果不會(huì)出現(xiàn)不定值x和高阻值z,下面的不等于類似。
      4. !==:不等于
    6. 移位運(yùn)算符:
      1. <<:左移運(yùn)算符
      2. >>:右移運(yùn)算符
    7. 位拼接運(yùn)算符:
      1. {}使用大括號(hào)可以將兩個(gè)或多個(gè)信號(hào)的某些位拼接起來進(jìn)行運(yùn)算操作,其使用方法如下:{信號(hào)1的某幾位,信號(hào)2的某幾位,...,信號(hào)n的某幾位}
      2. 如果我們需要將a信號(hào)和b信號(hào)進(jìn)行拼接,可用{a,b}來進(jìn)行操作
      3. 除此之外,還可以通過重復(fù)發(fā)來進(jìn)行簡(jiǎn)化操作,如{4{w}}其相當(dāng)于{w,w,w,w}
      4. 可以通過嵌套的方式來表達(dá),如{b,{3{a,b}}}其相當(dāng)于{b,a,b,a,b,a,b}
    8. 縮減運(yùn)算符:縮減運(yùn)算符是單目運(yùn)算符,其也有與、或、非運(yùn)算,但是與位運(yùn)算不同的是,縮減運(yùn)算符是對(duì)單個(gè)操作數(shù)進(jìn)行或、與、非運(yùn)算,最后的結(jié)果為1位的二進(jìn)制數(shù),如與運(yùn)算:
// 全加器模塊
module full_adder (
    input a,
    input b,
    input cin,
    output sum,
    output cout
);
    // 對(duì)中間的變量進(jìn)行定義
    wire s1, c1, c2;
    // 對(duì)半加器的實(shí)例化
    half_adder half_adder1(a, b, s1, c1);
    half_adder half_adder2(s1, cin, sum, c2);
    // 對(duì)或門的實(shí)例化
    or_gate or_gate1(c1, c2, cout);
endmodule
reg [3:0] B;
reg C;
// 對(duì)B進(jìn)行縮減與運(yùn)算,其運(yùn)算過程相當(dāng)于 C = ((B[0] & B[1]) & B[2]) & B[3]
C = &B;
  1. 除此之外我們還需要對(duì)Verilog的數(shù)據(jù)類型有一定的了解:
    1. 常量
      1. 數(shù)字:
        1. 整數(shù):
          1. 二進(jìn)制整數(shù):b或B
          2. 八進(jìn)制整數(shù):o或O
          3. 十進(jìn)制整數(shù):d或D
          4. 十六進(jìn)制整數(shù):h或H
          5. 其表示方法有三種:
            1. <位寬><進(jìn)制><數(shù)字>,如2'b00就是一個(gè)兩位的二進(jìn)制數(shù)字00
            2. <進(jìn)制><數(shù)字>,在這種情況下,數(shù)字的位寬采用默認(rèn)位寬(由機(jī)器系統(tǒng)決定),最少為32位,因此不推薦
            3. <數(shù)字>,在這種描述方式中,采用默認(rèn)進(jìn)制(十進(jìn)制),但是描述不清,一般仍采用第一種表示方法
        2. xz值:數(shù)電中,x代表不定值,z值代表高阻值。如:
          1. 4'b10x0表示4位的二進(jìn)制數(shù)從地位數(shù)起的第二位為不定值
          2. 12'dz或12'd?表示12為十進(jìn)制數(shù),其值為高阻值
          3. 8'h4x表示8位十六進(jìn)制,其低4位為不定值
        3. 負(fù)數(shù):在位寬表達(dá)式前加上一個(gè)減號(hào),如:-8'd5
        4. 下劃線:可以具體的數(shù)字之間分隔開來以提高程序可讀性,如:16'b1010_0000_1111_0101
      2. 參數(shù):即用parameter定義一個(gè)標(biāo)識(shí)符代表一個(gè)常量,以提高程序可讀性和可維護(hù)性,常用于定義延遲時(shí)間和變量寬度。如:parameter msb = 7;定義參數(shù)msb為常量7。
    2. 變量:
      1. wire型:常用來表示用以assign關(guān)鍵字指定的組合邏輯信號(hào),Verilog模塊中的輸入和輸出信號(hào)默認(rèn)自動(dòng)定義為wire型??捎米鋈魏畏匠淌降妮斎耄部梢杂米?code>assign語句或?qū)嵗妮敵?。其定義格式如下:wire [n-1:0] 數(shù)據(jù)名1,數(shù)據(jù)名2,...,數(shù)據(jù)名i,其表示共有i條總線,每條總線內(nèi)有n條線路
      2. reg型:即寄存器數(shù)據(jù)類型,通過賦值語句可改變寄存器存儲(chǔ)的值,其初始值為不定值x,因此在使用reg型時(shí)一般需要賦初值,否則在仿真中會(huì)出現(xiàn)不定值x,無法通過仿真確認(rèn)其結(jié)果。同時(shí)reg型只表示被定義的信號(hào)將用在always模塊,在always模塊內(nèi)被賦值的每一個(gè)信號(hào)都必須被定義成reg型。其定義格式如下:reg [n-1:0] 數(shù)據(jù)名1,數(shù)據(jù)名2,...,數(shù)據(jù)名i。
      3. memory型:通過對(duì)reg型變量建立數(shù)組來對(duì)存儲(chǔ)器建模,可以描述RAM型存儲(chǔ)器、ROM存儲(chǔ)器和reg文件。數(shù)組中的每一個(gè)單元通過一個(gè)數(shù)組索引進(jìn)行尋址。其定義格式如下:reg [n-1:0] 存儲(chǔ)器名[m-1:0];

4.仿真文件

在生成bit文件下載到板子之前,我們一般會(huì)通過編寫仿真文件對(duì)已完成的模塊進(jìn)行驗(yàn)證,其仿真文件如下:

module full_adder_test_top;
// 定義輸入到全加器的信號(hào)
reg a_test, b_test, cin_test;
// 定義從全加器輸出的信號(hào)
wire sum_test, cout_test;
// 將輸入信號(hào)和輸出信號(hào)與全加器相連接
full_adder full_adder_test(
    .a(a_test), 
    .b(b_test), 
    .cin(cin_test), 
    .sum(sum_test), 
    .cout(cout_test)
    );
    // 開始仿真
    initial begin
        // 初識(shí)時(shí)刻為0,對(duì)各個(gè)輸入信號(hào)進(jìn)行初始化
        a_test = 0;
        b_test = 0;
        cin_test = 0;
        // 過了20ns后改變信號(hào)值
        #20 a_test = 1;
        b_test = 0;
        cin_test = 0;
        #20 a_test = 1;
        b_test = 1;
        cin_test = 0;
        #20 a_test = 1;
        b_test = 1;
        cin_test = 1;
        #20 a_test = 0;
        b_test = 0;
        cin_test = 1;
        // 調(diào)用系統(tǒng)函數(shù)使仿真停止
        #20 $stop;
    end
endmodule

從這里我們看到一般仿真文件的編寫規(guī)則:首先,仿真模塊無輸入無輸出;第二,定義仿真的全加器輸入信號(hào)一般使用reg型,輸出一般使用wire型;第三,使用initial塊確定仿真過程中的各種輸入值的初始化以及賦值;第四,其基本單位為ns?!?highlight: github

本部分將不再介紹Vivado工程的整體流程,將主要精力放在代碼上面,具體的流程可參考:Verilog學(xué)習(xí)一: 控制LED燈的亮滅 - 掘金 (juejin.cn)

1. 全加器

那么什么是全加器呢?我們都知道加法,即1+1=2,當(dāng)個(gè)位數(shù)相加大于9時(shí)就需要進(jìn)位。在二進(jìn)制中也是如此,因此,一位二進(jìn)制的相加的真值表便如下圖:

a b sum count
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

圖中a、b為輸出,sum為相加的結(jié)果,count為進(jìn)位,即當(dāng)輸入都為1時(shí),相加的結(jié)果為0,進(jìn)位信號(hào)輸出1。這就是一個(gè)一位半加器。而全加器就是在此基礎(chǔ)上再加一個(gè)輸入,這個(gè)輸入用來獲取前一個(gè)的進(jìn)位信號(hào),其真值表如下圖:

count a b sum count
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1

這就是一個(gè)全加器的真值表。

2. 設(shè)計(jì)思路

我們都知道Verilog最大的特點(diǎn)就是自頂向下的設(shè)計(jì)方式,因此我們嘗試對(duì)上面的全加器進(jìn)行模塊劃分,即使用兩個(gè)半加器和一個(gè)或門來實(shí)現(xiàn),其模塊如下圖:

這樣就可以實(shí)現(xiàn)一個(gè)一位全加器。

3. 模塊化實(shí)現(xiàn)

  1. 首先我們來實(shí)現(xiàn)一個(gè)簡(jiǎn)單的或門模塊,其具有兩輸入一輸出,因此在module命名中對(duì)其定義輸入a b輸出c,然后將ab進(jìn)行或運(yùn)算并賦值給c,如下:
// 或門模塊
module or_gate (
    input a,
    input b,
    output c
);
    // 或運(yùn)算 
    assign c = a | b;
endmodule
  1. 接下來我們來實(shí)現(xiàn)較為復(fù)雜的半加器,其具有兩輸入兩輸出,通過我們上面對(duì)半加器真值表的觀察可知,輸出的相加信號(hào)可視為兩輸入信號(hào)的異或運(yùn)算,輸出的進(jìn)位信號(hào)可視為兩輸入信號(hào)的與運(yùn)算,因此實(shí)現(xiàn)如下:
// 半加器模塊
module half_adder (
    input a,
    input b,
    output sum,
    output carry
);
    // 異或運(yùn)算完成相加
    assign sum = a ^ b;
    // 與運(yùn)算完成進(jìn)位
    assign carry = a & b;
endmodule
  1. 接下來就是根據(jù)設(shè)計(jì)思路通過對(duì)半加器模塊和或門模塊的引用來完成一位全加器的頂層模塊設(shè)計(jì):
  2. 其基本語法仍然是賦值語句,只不過多了運(yùn)算符的操作,與C語言類似,Verilog也有多種運(yùn)算符(默認(rèn)具有C語言基礎(chǔ),僅對(duì)與C語言不同的進(jìn)行解釋):
    1. 算數(shù)運(yùn)算符:
      1. +:加法運(yùn)算符,或正值運(yùn)算符
      2. -:減法運(yùn)算符,或負(fù)值運(yùn)算符
      3. *:乘法運(yùn)算符
      4. /:除法運(yùn)算符
      5. %:模運(yùn)算符
    2. 位運(yùn)算符:
      1. ~:取反
      2. &:按位與
      3. |:按位或
      4. ^:按位異或
      5. ^~:按位同或
    3. 邏輯運(yùn)算符:
      1. &&:邏輯與
      2. ||:邏輯或
      3. !:邏輯非
    4. 關(guān)系運(yùn)算符:
      1. <:小于
      2. >:大于
      3. <=:小于等于
      4. >=:大于等于
    5. 等式運(yùn)算符:
      1. ==:等于
      2. !=:不等于
      3. ===:等于,與上面的等于不同的是,這里的等于對(duì)兩個(gè)操作數(shù)的要求是嚴(yán)格的,即對(duì)不定值x和高阻值z也會(huì)進(jìn)行比較,只有兩端嚴(yán)格相等時(shí)其結(jié)果才為1,因此其結(jié)果不會(huì)出現(xiàn)不定值x和高阻值z,下面的不等于類似。
      4. !==:不等于
    6. 移位運(yùn)算符:
      1. <<:左移運(yùn)算符
      2. >>:右移運(yùn)算符
    7. 位拼接運(yùn)算符:
      1. {}使用大括號(hào)可以將兩個(gè)或多個(gè)信號(hào)的某些位拼接起來進(jìn)行運(yùn)算操作,其使用方法如下:{信號(hào)1的某幾位,信號(hào)2的某幾位,...,信號(hào)n的某幾位}
      2. 如果我們需要將a信號(hào)和b信號(hào)進(jìn)行拼接,可用{a,b}來進(jìn)行操作
      3. 除此之外,還可以通過重復(fù)發(fā)來進(jìn)行簡(jiǎn)化操作,如{4{w}}其相當(dāng)于{w,w,w,w}
      4. 可以通過嵌套的方式來表達(dá),如{b,{3{a,b}}}其相當(dāng)于{b,a,b,a,b,a,b}
    8. 縮減運(yùn)算符:縮減運(yùn)算符是單目運(yùn)算符,其也有與、或、非運(yùn)算,但是與位運(yùn)算不同的是,縮減運(yùn)算符是對(duì)單個(gè)操作數(shù)進(jìn)行或、與、非運(yùn)算,最后的結(jié)果為1位的二進(jìn)制數(shù),如與運(yùn)算:
// 全加器模塊
module full_adder (
    input a,
    input b,
    input cin,
    output sum,
    output cout
);
    // 對(duì)中間的變量進(jìn)行定義
    wire s1, c1, c2;
    // 對(duì)半加器的實(shí)例化
    half_adder half_adder1(a, b, s1, c1);
    half_adder half_adder2(s1, cin, sum, c2);
    // 對(duì)或門的實(shí)例化
    or_gate or_gate1(c1, c2, cout);
endmodule
reg [3:0] B;
reg C;
// 對(duì)B進(jìn)行縮減與運(yùn)算,其運(yùn)算過程相當(dāng)于 C = ((B[0] & B[1]) & B[2]) & B[3]
C = &B;
  1. 除此之外我們還需要對(duì)Verilog的數(shù)據(jù)類型有一定的了解:
    1. 常量
      1. 數(shù)字:
        1. 整數(shù):
          1. 二進(jìn)制整數(shù):b或B
          2. 八進(jìn)制整數(shù):o或O
          3. 十進(jìn)制整數(shù):d或D
          4. 十六進(jìn)制整數(shù):h或H
          5. 其表示方法有三種:
            1. <位寬><進(jìn)制><數(shù)字>,如2'b00就是一個(gè)兩位的二進(jìn)制數(shù)字00
            2. <進(jìn)制><數(shù)字>,在這種情況下,數(shù)字的位寬采用默認(rèn)位寬(由機(jī)器系統(tǒng)決定),最少為32位,因此不推薦
            3. <數(shù)字>,在這種描述方式中,采用默認(rèn)進(jìn)制(十進(jìn)制),但是描述不清,一般仍采用第一種表示方法
        2. xz值:數(shù)電中,x代表不定值,z值代表高阻值。如:
          1. 4'b10x0表示4位的二進(jìn)制數(shù)從地位數(shù)起的第二位為不定值
          2. 12'dz或12'd?表示12為十進(jìn)制數(shù),其值為高阻值
          3. 8'h4x表示8位十六進(jìn)制,其低4位為不定值
        3. 負(fù)數(shù):在位寬表達(dá)式前加上一個(gè)減號(hào),如:-8'd5
        4. 下劃線:可以具體的數(shù)字之間分隔開來以提高程序可讀性,如:16'b1010_0000_1111_0101
      2. 參數(shù):即用parameter定義一個(gè)標(biāo)識(shí)符代表一個(gè)常量,以提高程序可讀性和可維護(hù)性,常用于定義延遲時(shí)間和變量寬度。如:parameter msb = 7;定義參數(shù)msb為常量7。
    2. 變量:
      1. wire型:常用來表示用以assign關(guān)鍵字指定的組合邏輯信號(hào),Verilog模塊中的輸入和輸出信號(hào)默認(rèn)自動(dòng)定義為wire型??捎米鋈魏畏匠淌降妮斎?,也可以用做assign語句或?qū)嵗妮敵?。其定義格式如下:wire [n-1:0] 數(shù)據(jù)名1,數(shù)據(jù)名2,...,數(shù)據(jù)名i,其表示共有i條總線,每條總線內(nèi)有n條線路
      2. reg型:即寄存器數(shù)據(jù)類型,通過賦值語句可改變寄存器存儲(chǔ)的值,其初始值為不定值x,因此在使用reg型時(shí)一般需要賦初值,否則在仿真中會(huì)出現(xiàn)不定值x,無法通過仿真確認(rèn)其結(jié)果。同時(shí)reg型只表示被定義的信號(hào)將用在always模塊,在always模塊內(nèi)被賦值的每一個(gè)信號(hào)都必須被定義成reg型。其定義格式如下:reg [n-1:0] 數(shù)據(jù)名1,數(shù)據(jù)名2,...,數(shù)據(jù)名i。
      3. memory型:通過對(duì)reg型變量建立數(shù)組來對(duì)存儲(chǔ)器建模,可以描述RAM型存儲(chǔ)器、ROM存儲(chǔ)器和reg文件。數(shù)組中的每一個(gè)單元通過一個(gè)數(shù)組索引進(jìn)行尋址。其定義格式如下:reg [n-1:0] 存儲(chǔ)器名[m-1:0];

4.仿真文件

在生成bit文件下載到板子之前,我們一般會(huì)通過編寫仿真文件對(duì)已完成的模塊進(jìn)行驗(yàn)證,其仿真文件如下:

module full_adder_test_top;
// 定義輸入到全加器的信號(hào)
reg a_test, b_test, cin_test;
// 定義從全加器輸出的信號(hào)
wire sum_test, cout_test;
// 將輸入信號(hào)和輸出信號(hào)與全加器相連接
full_adder full_adder_test(
    .a(a_test), 
    .b(b_test), 
    .cin(cin_test), 
    .sum(sum_test), 
    .cout(cout_test)
    );
    // 開始仿真
    initial begin
        // 初識(shí)時(shí)刻為0,對(duì)各個(gè)輸入信號(hào)進(jìn)行初始化
        a_test = 0;
        b_test = 0;
        cin_test = 0;
        // 過了20ns后改變信號(hào)值
        #20 a_test = 1;
        b_test = 0;
        cin_test = 0;
        #20 a_test = 1;
        b_test = 1;
        cin_test = 0;
        #20 a_test = 1;
        b_test = 1;
        cin_test = 1;
        #20 a_test = 0;
        b_test = 0;
        cin_test = 1;
        // 調(diào)用系統(tǒng)函數(shù)使仿真停止
        #20 $stop;
    end
endmodule

從這里我們看到一般仿真文件的編寫規(guī)則:首先,仿真模塊無輸入無輸出;第二,定義仿真的全加器輸入信號(hào)一般使用reg型,輸出一般使用wire型;第三,使用initial塊確定仿真過程中的各種輸入值的初始化以及賦值;第四,其基本單位為ns。文章來源地址http://www.zghlxwxcb.cn/news/detail-713818.html

到了這里,關(guān)于Verilog學(xué)習(xí)二:設(shè)計(jì)一個(gè)一位全加器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • FPGA編程入門——實(shí)現(xiàn)一位全加器

    FPGA編程入門——實(shí)現(xiàn)一位全加器

    然后通過4個(gè)1位全加器的串行級(jí)聯(lián),完成一個(gè)4位全加器的原理圖設(shè)計(jì);再改用 Verilog編程(3種模式:門電路、數(shù)據(jù)流和行為級(jí)描述),完成這個(gè)4位全加器設(shè)計(jì),并觀察Verilog代碼編譯綜合后生成的 RTL電路,與之前電路圖設(shè)計(jì)的4位全加器電路進(jìn)行對(duì)比 。 如果仿真波形的邏輯功

    2024年02月04日
    瀏覽(21)
  • 【無標(biāo)題】FPGA編程入門——實(shí)現(xiàn)一位全加器

    【無標(biāo)題】FPGA編程入門——實(shí)現(xiàn)一位全加器

    1、首先基于Quartus 軟件采用原理圖輸入方法完成一個(gè)1位全加器的設(shè)計(jì)。然后通過4個(gè)1位全加器的串行級(jí)聯(lián),完成一個(gè)4位全加器的原理圖設(shè)計(jì);再改用 Verilog編程(3種模式:門電路、數(shù)據(jù)流和行為級(jí)描述),完成這個(gè)4位全加器設(shè)計(jì),并觀察Verilog代碼編譯綜合后生成的 RTL電路,

    2024年02月03日
    瀏覽(25)
  • FPGA面試題【Verilog實(shí)現(xiàn)一個(gè)2位帶進(jìn)位全加器,畫出門級(jí)電路】

    FPGA面試題【Verilog實(shí)現(xiàn)一個(gè)2位帶進(jìn)位全加器,畫出門級(jí)電路】

    目錄 題目 核心思路 答案 FPGA全貌 Verilog實(shí)現(xiàn)一個(gè)2位帶進(jìn)位全加器,畫出門級(jí)電路 思路見代碼注釋 ? 第1節(jié) 什么是 FPGA FPGA 的全稱為 Field-Programmable Gate Array,即現(xiàn)場(chǎng)可編程門陣列。 FPGA 是在 PAL、 GAL、 CPLD 等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物, 是作為專用集成電路( ASI

    2024年02月08日
    瀏覽(47)
  • 【FPGA】Verilog:模塊化組合邏輯電路設(shè)計(jì) | 半加器 | 全加器 | 串行加法器 | 子模塊 | 主模塊

    【FPGA】Verilog:模塊化組合邏輯電路設(shè)計(jì) | 半加器 | 全加器 | 串行加法器 | 子模塊 | 主模塊

    前言: 本章內(nèi)容主要是演示Vivado下利用Verilog語言進(jìn)行電路設(shè)計(jì)、仿真、綜合和下載 示例:加法器 ? ? 功能特性:?采用?Xilinx Artix-7 XC7A35T芯片? 配置方式:USB-JTAG/SPI Flash 高達(dá)100MHz 的內(nèi)部時(shí)鐘速度? 存儲(chǔ)器:2Mbit SRAM ??N25Q064A SPI Flash(樣圖舊款為N25Q032A) 通用IO:Switch :

    2024年02月15日
    瀏覽(24)
  • 【Verilog】期末復(fù)習(xí)——設(shè)計(jì)帶進(jìn)位輸入和輸出的8位全加器,包括測(cè)試模塊

    數(shù)值(整數(shù),實(shí)數(shù),字符串)與數(shù)據(jù)類型(wire、reg、mem、parameter) 運(yùn)算符 數(shù)據(jù)流建模 行為級(jí)建模 結(jié)構(gòu)化建模 組合電路的設(shè)計(jì)和時(shí)序電路的設(shè)計(jì) 有限狀態(tài)機(jī)的定義和分類 期末復(fù)習(xí)——數(shù)字邏輯電路分為哪兩類?它們各自的特點(diǎn)是什么? 期末復(fù)習(xí)——VerilogHDL描述數(shù)字邏輯電

    2024年01月23日
    瀏覽(53)
  • 實(shí)驗(yàn)四 QUARTUS開發(fā)環(huán)境實(shí)驗(yàn) 設(shè)計(jì)半加器、全加器和四位全加器 blueee的學(xué)習(xí)筆記

    實(shí)驗(yàn)四 QUARTUS開發(fā)環(huán)境實(shí)驗(yàn) 設(shè)計(jì)半加器、全加器和四位全加器 blueee的學(xué)習(xí)筆記

    一、實(shí)驗(yàn)?zāi)康?1、通過實(shí)驗(yàn),能熟悉QUARTUS開發(fā)環(huán)境,能夠掌握QUARTUS的原理圖輸入法設(shè)計(jì)電路,掌握使用相關(guān)仿真工具進(jìn)行功能和時(shí)序仿真的方法; 2、通過實(shí)驗(yàn),加深對(duì)全加器電路的理解,并能使用QUARTUS的原理圖輸入法完成全加器的設(shè)計(jì),并能在QUARTUS中完成相關(guān)的仿真驗(yàn)證

    2024年02月05日
    瀏覽(78)
  • FPGA編程入門——基于Quartus件完成一個(gè)1位全加器的設(shè)計(jì)

    FPGA編程入門——基于Quartus件完成一個(gè)1位全加器的設(shè)計(jì)

    基于Quartus件完成一個(gè)1位全加器的設(shè)計(jì),分別采用:1)原理圖輸入 以及 2)Verilog編程 這兩種設(shè)計(jì)方法。開發(fā)板基于Intel DE2-115。 在此基礎(chǔ)上,用原理圖以及Verilog 編程兩種方式,完成4位全加器的設(shè)計(jì),對(duì)比二者生成的 RTL差別;使用modelsim驗(yàn)證邏輯設(shè)計(jì)的正確性,并在DE2-115開

    2024年02月05日
    瀏覽(51)
  • verilog全加器和四位加法器

    verilog全加器和四位加法器

    半加器: 保存為half_addr.bsf之后,可以在該項(xiàng)目中添加半加器 全加器: 通過RTL-Viewer查看半加器和全加器 添加全加器到項(xiàng)目 在process里面先后執(zhí)行start fitter 和start time analyzer 生成testbench模板 修改testbench文件: 添加到項(xiàng)目 注意在聯(lián)合modelsim時(shí)讓generate functinal simulation netlist值為

    2024年02月07日
    瀏覽(19)
  • 基于Verilog與器件圖的1位全加器實(shí)現(xiàn)

    基于Verilog與器件圖的1位全加器實(shí)現(xiàn)

    1位二進(jìn)制數(shù)全加器是一個(gè)具有三個(gè)輸入端和兩個(gè)輸出端的,能對(duì)被加數(shù)、加數(shù)以及來自低位的進(jìn)位相加得到“全加和”與“全加進(jìn)位”。 它的真值表如下: Ai Bi Ci-1 Ci Si 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 它的邏輯表達(dá)式如下: 從仿真的結(jié)果來看,

    2024年02月07日
    瀏覽(27)
  • 用Verilog編寫1位全加器,并進(jìn)行波形仿真

    用Verilog編寫1位全加器,并進(jìn)行波形仿真

    Quartus II+ModelSiml 全加器英語名稱為full-adder,是用門電路實(shí)現(xiàn)兩個(gè)二進(jìn)制數(shù)相加并求出和的組合線路,稱為一位全加器。一位全加器可以處理低位進(jìn)位,并輸出本位加法進(jìn)位。

    2024年02月11日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包