diff options
author | Clifford Wolf <clifford@clifford.at> | 2014-01-28 06:55:47 +0100 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2014-01-28 06:55:47 +0100 |
commit | 2cb47355d4b3e8021a88f68f7a5f33ce46ff51b0 (patch) | |
tree | 83a3e52f3a46f2db264106798e416da63e7ae743 /manual/CHAPTER_StateOfTheArt/forgen02.v | |
parent | 842ca2f011a6030faccc690986accb0ca8035ec8 (diff) |
Renamed manual/FILES_* directories
Diffstat (limited to 'manual/CHAPTER_StateOfTheArt/forgen02.v')
-rw-r--r-- | manual/CHAPTER_StateOfTheArt/forgen02.v | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/manual/CHAPTER_StateOfTheArt/forgen02.v b/manual/CHAPTER_StateOfTheArt/forgen02.v new file mode 100644 index 00000000..14af070c --- /dev/null +++ b/manual/CHAPTER_StateOfTheArt/forgen02.v @@ -0,0 +1,30 @@ +module uut_forgen02(a, b, cin, y, cout); + +parameter WIDTH = 8; + +input [WIDTH-1:0] a, b; +input cin; + +output [WIDTH-1:0] y; +output cout; + +genvar i; +wire [WIDTH-1:0] carry; + +generate + for (i = 0; i < WIDTH; i=i+1) begin:adder + wire [2:0] D; + assign D[1:0] = { a[i], b[i] }; + if (i == 0) begin:chain + assign D[2] = cin; + end else begin:chain + assign D[2] = carry[i-1]; + end + assign y[i] = ^D; + assign carry[i] = &D[1:0] | (^D[1:0] & D[2]); + end +endgenerate + +assign cout = carry[WIDTH-1]; + +endmodule |