giúp với mã cho một ...:) newbie

T

toffee_pie

Guest
lời chào tất cả,

có thể bất cứ ai có Verilog kỹ năng giúp tôi thực hiện điều này ALU, tôi muốn có được trước hết là hoạt động chức năng cơ bản trước khi tôi chuyển sang những nhiệm vụ khó khăn hơn.

It wont biên dịch, tôi nhận được một lỗi với một phần endmodule?còn tôi cần một reg để lưu trữ các bit tràn và làm việc ra ký kết và đầu ra unsigned?/ / Verilog MÃ/ / 'Timescale 10ns

module ALU (a, b, cin, Op, CLK, resetb, C [s 15:0], s, ov)sản lượng đã ký C [s 15:0]; / / 2 của khen đã ký kết từ 16 bit đầu ra

sản lượng ov; / / Kết quả của việc bổ sung, trừ là
/ / Nghĩa vụ phải phù hợp với
/ / Trong các bước quan trọng được sử dụng để đại diện cho những con số.
/ / Nếu 'n' bit được sử dụng để đại diện cho số ký
/ / Ở 2's bổ sung
/ / Đề án, sau đó phải được kết quả trong khoảng
/ /-2n-1 đến 2n-1-1.
/ / Nếu kết quả không phù hợp trong phạm vi này, sau đó một số học
/ / Tràn bộ nhớ đã xảy ra, điều này được sử dụng cho hoạt động ký kết.đầu vào CLK, resetb; / / hệ thống đồng hồ @ 100MHz, đồng bộ
/ / Đặt lại hệ thống hoạt động thấp
input [02:00] Op; / / gán ALU một trong 8 toán hạng của Chỉ thị
input [15:00] a, b; / / unsigned 16 bit toán hạng đầu vào để ALU
đầu vào cin, s; / / Carry tại, Sum Trong/ / Nội bộ các nút

dây [15:00] a, b;
reg ký [15:00] c; / / đầu ra reg
reg ký s;
reg ký ov;tham số WIDTH = 'D16;

Tham số ADD_AB = 3'b000; / / Ngoài ra -> c = a b
Tham số SUB_AB = 3'b001; / / trừ -> c = a - b
Tham số MUL_AB = 3'b010; / / phép nhân -> c = a * b
Tham số AND_AB = 3'b011; / / và -> c = a & b
Tham số OR_AB = 3'b100; / / hoặc -> c = a | b
Tham số XOR_AB = 3'b101; / / xor -> c = a ^ b
Tham số SHIFT_LEFT_A = 3'b110; / / dịch chuyển trái -> c = a>> 1
Tham số SHIFT_RIGHT_A = 3'b111; / / dịch chuyển quyền -> c = b>> 1luôn luôn @ (một hoặc b hoặc op) bắt đầu

/ / Lets làm hoạt động Arithmetic

bắt đầu

if (op [02:01] == 2'b00) bắt đầu

trường hợp (op [02:00])

3'b000: c = a b; / / Ngoài
3'b001: c = a - b; / / trừ
/ / 3'b010: c = a * b; / /
default: c = 16'bx;

endcase

/ / overflow = c [15] ^ c [14];

cuối/ / Lets làm hoạt động Hợp Lý

else if (op [02:01] == 2'b01) bắt đầu

trường hợp (op [02:00])

3'b011: c = a & b; / / hợp lý và
3'b100: c = a | b; / / hợp lý hoặc
3'b111: c = a ^ b; / / logic exor
default: c = 16'bx;endcase

endmodule
Last edited by toffee_pie vào ngày 01 tháng 11 năm 2009 23:15; edited 3 lần trong tổng số

 
i xin lỗi đã không nhìn vào mã Full được nêu ra, nhưng tôi đã thông báo một số điều trong đầu.I'm a Noob quá, nên tôi không chắc có bao nhiêu giúp tôi có thể được, nhưng:
1) đầu ra tràn không có trong danh sách các IO trong danh sách độ nhạy cảm của mô-đun "" (tôi xin lỗi quên tên và tôi muốn nói danh sách các tham số như thể nó là C).
2) IIRC, a 16-bit signed đầu vào sẽ là một cái gì đó nhưMã số:

input [12: -3] a, b;
 
Hi ya,

nhờ sự giúp đỡ này, tôi có hiểu được.Tôi đã tự hỏi về bit thêm "cho các hoạt động mang ...

<img src="http://www.edaboard.com/images/smiles/icon_neutral.gif" alt="Trung lập" border="0" />hai đầu vào a, b là 'unsigned'

đầu ra, c là 'ký'.[s 15:0]

nào đó có nghĩa là đầu ra là 17 bit?

Tôi đã bao gồm các thuật ngữ ov cho tràn bộ nhớ trong khai báo.

Tôi muốn có được những điều cơ bản đi trước khi tôi lo lắng về các hoạt động dịch chuyển và các nhân toán hạng, trong đó nhu cầu chỉnh hoặc 'đang chặt' là câu trả lời đầu ra có thể vượt quá 16 bit.

 
toffee_pie đã viết:đầu ra, c là 'ký'.
[s 15:0]

nào đó có nghĩa là đầu ra là 17 bit?

 
s là biểu hiện một o ký / pi đoán ...trong Verilog tất cả các tờ khai được unsigned cho mặc định, vậy bạn cần phải báo nếu chúng được ký kết,

vì vậy tôi đã nói đã ký cho các đầu ra để cho nó biết.

Tôi làm thế nào đối phó với Regs và lưu trữ là một điều, và Nếu tôi có thể thực hiện điều này theo một vòng lặp luôn ....

 
Điều tôi là tôi không thấy bất kỳ tham số tuyên bố đặt tên là 's' hay biết của bất kỳ từ khoá được gọi là 's' trong Verilog.

 
ha,

thats đúng ...!

c [s 15:0] là đầu ra

trong đó s là 2 chữ ký khen đầu ra

do đó có thể được sửa đổi vào mã của tôi.

Tôi không chắc chắn những gì tôi làm với S, và làm thế nào tôi tuyên bố nó?

một mình> 'reg ký s' Tôi sẽ nghĩ gì?

1 bit từ?là tuyên bố này cũng giống như ở đầu ra reg ..?

 
Tôi xin lỗi Tôi không chắc tôi hiểu rõ câu hỏi của bạn.
Bạn nói rằng bạn muốn có một chút đăng nhập?

 
Tôi có kèm theo một khối diag của thiết kế của tôi.

Tôi cũng đã được sử dụng một khối cập nhật của sản phẩm cuối cùng như bản gốc bỏ ra trên thực hiện đầu vào vv

Tôi thay đổi mã của tôi cũng có, hơi liên quan đến việc khai báo cổng.
Xin lỗi, nhưng bạn cần phải đăng nhập để xem tập tin đính kèm này

 
hello, đã không có một cơ hội để xem xét mã của bạn chưa (bạn có thể thấy rằng tôi đều làm việc trên một cái gì đó đăng trên các diễn đàn cho bản thân mình.)
những gì tôi DID làm dù, đã tìm một số thông tin cho các dự án và vấp ngã của tôi khi này:
http://people.tamu.edu/ ~ rajballavdash/lab_manual_3_4.pdf
một tuto cho một ALU ký
chúc may mắn

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Cười" border="0" />
 
tốt,

Tôi đã được làm phức tạp hơn cách thức mã của tôi quá nhiều.Tôi không cần bất kỳ thực, cờ tổng hoặc Regs.

Làm cho nó quá phức tạp để vì lợi ích của riêng tôi.Đầu ra là 16 bit từ, cộng với chút 1 cho bit khen 2s.

[MSB ].................[ LSB]

 
u đã giải quyết vấn đề của bạn, nếu không cho tôi biết.

 
xin chào

Có, tôi đã làm việc mã của tôi.tôi cũng đã nhận nó synthised ngày Xilinx ISE

Tôi cần phải tạo một băng ghế kiểm tra cho nó bây giờ và những vấn đề gặp phải.

một ai đó giúp tôi với Cuốn kiểm tra này, xin hãy?Tôi chạy nó trên sim đa và có một lỗi để làm với các bit c là không đúng kích thước và một số những thứ khác cũng được nhắc đến không đúng kích cỡ.

Tôi có hai 'c' biến trong mã của tôi, một là c_nx = đầu ra của alu, được gửi đến ff để được hẹn giờ, sản lượng này là đầu ra cổng thực tế 'c'

c_nx vậy là không khai báo là một sản lượng.

bất cứ ai?module ALU (a, b, op, CLK, resetb, c);tham số s = 'd1;
sản lượng đã ký [s 15:0] c;
reg ký [s 15:0] c;input [15:00] a, b;
input [02:00] op;
resetb đầu vào;
CLK đầu vào;reg ký [s 15:0] c_nx;
/ / đầu ra ký [s 15:0] c_nx;
/ / Port khai báotham số WIDTH = 'D16;

Tham số ADD_AB = 3'b000; / / Ngoài ra -> c = a b
Tham số SUB_AB = 3'b001; / / trừ -> c = a - b
Tham số MUL_AB = 3'b010; / / phép nhân -> c = a * b
Tham số AND_AB = 3'b011; / / và -> c = a & b
Tham số OR_AB = 3'b100; / / hoặc -> c = a | b
Tham số XOR_AB = 3'b101; / / xor -> c = a ^ b
Tham số SHIFT_LEFT_A = 3'b110; / / dịch chuyển trái -> c = a>> 1
Tham số SHIFT_RIGHT_B = 3'b111; / / dịch chuyển quyền -> c = b>> 1luôn luôn @ (một hoặc b hoặc op)

trường hợp (op)

ADD_AB: c_nx = a b;
SUB_AB: c_nx = a - b;
MUL_AB: c_nx = a * b;
AND_AB: c_nx = a & b;
OR_AB: c_nx = a | b;
XOR_AB: c_nx = a ^ b;
SHIFT_LEFT_A: c_nx = a>> 1;
SHIFT_RIGHT_B: c_nx = b>> 1;

endcase

luôn luôn @ (posedge CLK)

nếu (~ resetb)

c <= 0;

khác

c <= c_nx;

endmodule

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

ALU_tb module (/ / cổng không; đây là một testbench
);Tham số PRD = 10; / / ns - theo lý luận trái tay để chỉ thị timescale
Tham số SIMLEN = 100; / / clks - số clks mà để chạy các mô phỏng

tham số s = 'd1;
tham số WIDTH = 'D16;/ / Đầu vào cho DUT được reg các loạireg CLK, resetb;
reg [15:00] tb_a, tb_b, true_output;
reg [02:00] tb_op;

/ / Đầu ra từ DUT là loại dây điện

Dây ký [15:00] tb_c;

số nguyên i, j, outfile, pat_error;

/ / Nhanh chóng thiết bị theo thử nghiệm

ALU my_alu_testbench (c (. Tb_c), một tb_a ().. B (tb_b), op (tb_op).,. Resetb (resetb),. CLK (CLK));

luôn luôn # 5 CLK = ~ CLK; / / mỗi giây 5 nano nghịch, tạo ra khoảng thời gian 10ns

ban đầu

bắt đầu

$ màn hình (tb_a, tb_b, tb_c);

outfile = $ fopen ( "tb_c.txt");

if (! outfile) bắt đầu

$ display ( "không thể ghi tập tin");

$ kết thúc;

cuối

pat_error = 0;

resetb = 1'b1; CLK = 1'b1; một = 0; b = 0; op = 0;

# 2 resetb = 1'b0;

# 2 resetb = 1'b1;/ / Thử nghiệm để được hướng dẫn thêmop = 3'b000;

for (i = 0; i <65.536; i = i 1)

bắt đầu

for (i = 0; j <65.536; j = j 1)

bắt đầu

a = i [15:00]; b = j [15:00];

# 10 true_output = a b;

if (c! == true_output [15:00])

bắt đầu

$ fdisplay (outfile, "% b % b nên được% sinh nhưng sản lượng của bạn là% sinh", a, b, true_output, c);

pat_error = pat_error 1;

cuối
cuối
cuối

cuốiendmodule

 

Welcome to EDABoard.com

Sponsor

Back
Top