急求用Verilog HDL編寫的32位並行乘法器程式獎勵

2021-04-30 21:20:22 字數 3025 閱讀 4853

1樓:匿名使用者

module mac(out,opa,opb,clk,clr);

input clk,clr;

input [7:0] opa,opb;

output [15:0] out;

reg [15:0] out;

wire [15:0] result;

function [15:0] mult;

input [7:0] opa,opb;

reg [15:0] result;

integer i;

begin

result = opa[0]?opb : 0;

for(i=1;i<=7;i=i+1)

begin if(opa[i] == 1) result = result + (opb << 1); end

mult = result;

endendfunction

assign result = mult(opa,opb);

always @(posedge clk or posedge clr)

begin

if(clr) out <= 0;

else out <= result;

endendmodule

測試**:

`timescale 1ns/1ns

`include "mac.v"

module mac_tp;

reg [7:0] opa,opb;

reg clr,clk;

wire [15:0] out;

parameter dely = 100;

mac m1(out,opa,opb,clk,clr);

always #(dely) clk = ~clk;

initial begin

clr = 1;clk = 0;opa = 8'd0;opb = 8'd0;

#dely clr = 0;opa = 8'd1;opb = 8'd10;

#dely opa =8'd2;opb = 8'd10;

#dely opa =8'd3;opb = 8'd10;

#dely opa =8'd4;opb = 8'd10;

#dely opa =8'd5;opb = 8'd10;

#dely opa =8'd6;opb = 8'd10;

#dely opa =8'd7;opb = 8'd10;

#dely opa =8'd8;opb = 8'd10;

#dely opa =8'd9;opb = 8'd10;

#dely opa =8'd10;opb = 8'd10;

#dely $finish;

endinitial $monitor($time,,,"clr = %b opa = %d opb = %d",clr,opa,opb,out);

endmodule

2樓:佘影

module question(a,b,out);

parameter bitsize=32;

input[bitsize-1:0] a,b;

output[2*bitsize-1:0] out;

assign out= a*b;

endmodule

你要並行的乘法器,以上的程式簡單,而且運算速度快,但是佔用資源多,尤其是你的位數有32位

測試程式

`timescale 1ns/1ns

module question_test;

reg[31:0] a,b;

wire[63:0] out;

parameter step = 20;

question question(a,b,out);

initial

begin

a=0;b=0;

#step a=245;b=132;

#step a=4294967295;b=4294967295;

#step $finish;

endendmodule

3樓:

ls的明顯不符合要求...

要是畢業設計這麼簡單還叫畢業設計?

起碼應該加個時鐘訊號吧?

用verilog hdl語言編寫一個8—3譯碼器程式

4樓:棠棠球

首先要糾正一下,相對多的輸入轉化成為相對少的輸出,一般叫編碼器;相對少的輸入轉化成為相對多的輸出,一般叫譯碼器。所以,確切地說你要做的應該是8-3編碼器(還是3-8譯碼器)。

//8-3編碼器verilog**

module enc_83(datain, dataout, en);

input [7:0] datain;

input en;

output [2:0] dataout;

reg [2:0] dataout;

always @*

if (~en)

dataout = 3'b0;

else case(datain)

8'b0000_0001: dataout = 3'b000;

8'b0000_0010: dataout = 3'b001;

8'b0000_0100: dataout = 3'b010;

8'b0000_1000: dataout = 3'b011;

8'b0001_0000: dataout = 3'b100;

8'b0010_0000: dataout = 3'b101;

8'b0100_0000: dataout = 3'b110;

8'b1000_0000: dataout = 3'b111;

default: dataout = 3'b000;

endcase

endmodule

//關於上述**的說明

1) 上述實現的是8-3普通編碼器,即同一時刻輸入保證只有一位有效;

2) 上述**沒有輸出編碼有效的標識位,如果需要的話可自行新增。

急!!求VF程式編寫

假設st1表欄位有 考號 姓名 院系 是否通過 st2表結構有 考號 姓名 筆試 上機 程式如下 clear sele 2 use st2 index on 考號 tag 考號 sele 1 use st1 set relation to 考號 into b replace all 是否通過 wit...

用c語言編寫程式,求s

staticvoidmain stringargs console.writeline 結果回 是答 sum console.readkey 用c語言編寫程式,計算s 1 1 2 1 2 3 1 2 3 n include usingnamespacestd intmain cout 結果2為 re...

cmd用編寫的語言,cmd用txt編寫的語言

執行cmd命令一般來說有兩種方式,一是點 開始 執行 按徽標鍵 r 然後輸入cmd。然後在黑框裡輸入。二是開啟txt,在裡面事先寫好命令,然後將檔案儲存為.bat的檔案,也就是人們通常說的 批處理檔案 當你想執行某些功能的時候,直接雙擊一下就可以了。第二種方法要省事些。兩種方法是殊途同歸,最終執行的...