2013年9月20日

硬體描述語言 作業

101-1學期 硬體描述語言 作業(4) 4A037052_蘇偉諺

1.     (A) 請問一位元半加器與一位元全加器之差別為何?

全加器:要考慮進位輸出位元與進位輸入位元
        =>被加數+加數+進位輸入
半家器:不考慮進位輸出位元與進位輸入位元
        =>被加數+加數


(B) 請分別寫出一位元半加器(模組名為HA)與全加器(模組名為FA)verilog模組。

====================================
//全加器
module ha_1(A,B,S,C);
input A,B;
output S,C;

assign #1 S=A^B;//A XOR B
assign #1 C=A&B;//A and B

endmodule
====================================
//半加器
module fa_1(cin,A,B,S,C);
input cin,A,B;
output S,C;

assign #1 S=cin^A^B;
assign #1 C=(A&B)|(A|B)&cin;

endmodule

    =====================================




2.     請以verilog設計一21多工器模組名為mux2_1,再以此21多工器模組設計一41多工器(模組名為mux4_1)

      ===========二對一多工器============
module mux2_1(a,b,s,y);
          input a,b,s;
          output y;
          assign #0 y=s?b:a;
endmodule
===========四對一多工器============
module mux4_1(a,c,b,d,s0,s1,y);
        input a,c,b,d,s0,s1;
        output y;
        wire y0,y1;

        mux2_1 U1(a,b,s0,y0);
        mux2_1 U2(c,d,s0,y1);
        mux2_1 U3(y0,y1,s1,y);
endmodule

//二對一多工器測試平台
=================================

3.     請設計一除以9計數器可計數0~8之時脈次數。

=================程式=================
module cnt10(clk,reset,q);
        input   clk,reset;
        output  [3:0] q;

        reg     [3:0] q;
        always@(posedge clk or posedge reset)
                if(reset)
                        q=0;
                else if(q==4'd8)
                                q= #1 0;
                        else
                                q= #1 q+1'b1;
endmodule
================測試平台================
`timescale 1ns/100ps
`include "cnt9.v"
module  testcnt10;
        reg     clk,reset;
        wire    [3:0] q;

cnt10 U1(clk,reset,q);

initial clk=0;
always #10 clk=~clk;

initial begin
        #0      reset=1;
        #10     reset=0;
        #1000   $finish;
        end
initial begin
         $dumpfile("testcnt10.vcd");
         $dumpvars;
         end
endmodule
===========GTKWAVE波形圖============


沒有留言:

張貼留言

文章有誤或有問題麻煩您留言告知! 謝謝您~~