How to do this please

OP #7576818
Rate this post
useful
not useful

The module will have the following input data:

a - 8 bits

b - 32 bits

compare - 1 bit

change - 3 bits

The module will have the following output data:

compare_out - 2 bits

return_out - 16 bits

select_out - x bits, where x represents the minimum number of bits needed to calculate the sum of positions containing 0 bits from a

Initially, the compare_out and return_out outputs will have all bits set to "1".

The select_out output will be independent of module stimuli and will calculate the sum of positions containing 0 bits from a.

The module reacts only to inputs a, b, and return.

The compare_out output changes only when compare is 1'b1; otherwise, it will remain at its previous value (for this subpoint, the use of the decision operator is desired).

If compare is 1, the compare_out output:

Will be 10 if the most significant 8 bits of b are less than a

Will be 00 if the most significant 8 bits of b are greater than a

Will be 01 if the most significant 8 bits of b are equal to bus a

The return_out output will only be modified when change has a value different from 3'b111.

If change is equal to 3'b100, then the return_out output will be equal to the bus formed by the least significant bits of a and b.

If change is equal to 3'b001, then the return_out output will be equal to the bus formed by the most significant bits of a and b.

If change is equal to 3'b101, then the return_out output will be equal to the bus formed by a and the least significant bits of b.

If change is equal to 3'b011, then the return_out output will be equal to the bus formed by a and the most significant bits of b.

If change is equal to 3'b000, then the return_out output will be equal to the bus formed by a and a.

If change is equal to 3'b010, then the return_out output will be equal to the bus formed by the least significant bits of b and the most significant bits of b.

For any other value of the change input, the return_out output will have a value equal to the bus formed by the least significant 16 bits of b negated.

  1. Create the corresponding testbench for the module from exercise 2 using the decision table test technique, and explain the chosen cases.
Moderator (Company: Titel) #7577638
Rate this post
useful
not useful

Berger wrote:

How to do this please

You must start with something, and when you encouter specific problems, then you can ask.

BTW: if this simple tasks gets you into big problems then maybe you should work out the very basics once more.

And for next time: give your thread a much more meanigful headline. A big lot of threads could be titeld "How to do this?"

#7577657
Rate this post
useful
not useful

Here a suggestion in LISP:

1
;; Helper function to calculate the sum of positions containing 0 bits from a
2
(defun sum-of-positions-0 (a)
3
  (loop :with sum = 0
4
        :for i :from 0 :below 8
5
        :when (= 0 (logand 1 (ash a i)))
6
        :do (incf sum (ash 1 i))
7
        :finally (return sum)))
8

9
;; Function to calculate the compare_out, return_out, and select_out
10
(defun module (a b compare change)
11
  (let* ((compare-out 3)           ; all bits set to "1" initially
12
         (return-out #xFFFF)        ; all bits set to "1" initially
13
         (select-out (sum-of-positions-0 a))) ; calculate select_out
14

15
    ;; Compare_out logic
16
    (when (= compare 1)
17
      (cond ((< (ash b -24) a) (setf compare-out 2))
18
            ((> (ash b -24) a) (setf compare-out 0))
19
            ((= (ash b -24) a) (setf compare-out 1))))
20

21
    ;; Return_out logic
22
    (unless (= change 7)
23
      (cond ((= change 4) (setf return-out (logior (logand a 255) (logand b #xFFFFFFFF))))
24
            ((= change 1) (setf return-out (logior (ash a 24) (logand b #x00FFFFFF))))
25
            ((= change 5) (setf return-out (logior (ash a 16) (logand b #xFFFF))))
26
            ((= change 3) (setf return-out (logior (ash a 16) (logand b #xFFFF0000))))
27
            ((= change 0) (setf return-out (logior (ash a 16) a)))
28
            ((= change 2) (setf return-out (logior (logand b #xFFFF) (ash b 16))))
29
            (t (setf return-out (lognot (logand b #xFFFF))))))
30

31
    ;; Return the results as a list
32
    (list compare-out return-out select-out)))
33

34
;; Test cases using decision table test technique
35
(defun test-case (a b compare change)
36
  (format t "Test Case: ~A ~A ~A ~A~%" a b compare change)
37
  (let ((result (module a b compare change)))
38
    (format t "Compare_out: ~A~%" (first result))
39
    (format t "Return_out: ~A~%" (second result))
40
    (format t "Select_out: ~A~%" (third result))
41
    (format t "~%")))
42

43
;; Generate and run test cases
44
(defun generate-test-cases ()
45
  (dolist (a '(0 1 2 255))
46
    (dolist (b '(0 1 2 4294967295))
47
      (dolist (compare '(0 1))
48
        (dolist (change '(0 1 2 3 4 5 6 7))
49
          (test-case a b compare change))))))
50

51
;; Run the test cases
52
(generate-test-cases)
#7577741
Rate this post
useful
not useful
  • "I don't have any clue how to do this, and I need it until next week"

  • "That's easy. There are many electronics forums across the web. Post it into some of them. Possibly there will be an idiot writing the code for you. Learn early how to let others make your job. And don't spent any time with responding to comments. You want code, not smalltalk, right?"

  • "But if they don't answer, I have to do it by myself."

  • "No. In this case you will try another forum or ask chatGPT. You still did not get the point completely. The reason why you become an engineer is to earn money, not to work as an engineer. So don't waste time with learning a programming language or such silly stuff."

  • "Sure, great. Let me just do that and then go to gaming party."

Reply

Please log in before posting.

or

Log in with Google account

Registration is free and takes only a minute.

Register now