$24
• Function Operations (Individual Work)
This part of the lab will be performed and submitted individually.
In this part, you are expected to implement basic memories as 2 Verilog modules. These modules will be used to store the functions, evaluate and store the result of evaluations.
1.1 Problem De nition
Each function will be in the form: a4x4 + a3x3 + a2x2 + a1x1 + a0x0. The module FUNCROM will contain 16 registers. Each register holds a 5-bit binary number which represents the coe cients of the function starting from a4 through a0. The values of a4 through a0 can either get +1 or -1: These values are represented in a register as 0 and 1, respectively. Examples of 3 registers and the functions they represent are given in the below table:
Register Value
Function
00000
x4 + x3
+ x2 + x + 1
01010
x4
x3
+ x2
x + 1
11110
x4
x3 x2
x + 1
Given the index value as input, FUNCROM module basically returns the register value stored at that index as output. It works as a combinational circuit. The values of FUNCROM will be as the following table:
Index
Register Value
0000
00000
0001
00010
0010
00100
0011
00111
0100
01010
0101
01011
0110
01101
0111
01110
1000
10001
1001
10010
1010
10100
1011
10111
1100
11001
1101
11010
1110
11110
1111
11111
1
The module FUNCRAM will contain 16 registers. Each register contains 9 bits. Initially, the values of all RAM registers will be 9’b000000000. FUNCRAM module basically has two functionalities: 1) Reading data in given index, 2) Writing data into memory. These are determined by the modes given below:
mode(1 bit):
0 ! read mode
1 ! write mode
Write Mode
In write mode, your task is to evaluate the modulo 7/derivative of the function with the given argument and store the result in the FUNCRAM. The input will be a 7-bit number. The rst 4 bits of the input are used as an index to select the functions from the FUNCROM. The fth bit is used to determine the type of the operation. If the value of fth bit is 0, the function with the given the argument will be evaluated which is followed by mod 7 operation and the nal result is calculated. If the value of fth bit is 1, the derivative of the function will be evaluated with the given argument. The last 2 bits of the input correspond to the argument of the function where binary 00, 01, 10 and 11 will represent +2,+1,-1 and -2 in decimal, respectively. The output will be a 9-bit number where the most signi cant bit denotes the sign (0 if positive and 1 if negative). The examples are given in the below table:
Input
ROM
Operation
Arg.
Function At Given
Calculation
Output
Index
Type
ROM Index
0000000
0000
modulo 7
2
P (x) = x4 + x3 + x2 + x1 + 1
P(2)=24+23+22+2+1=31
000000011
P (2) modulo 7 = 31 mod 7 = 3
0000101
0000
derivative
1
P (x) = x4 + x3 + x2 + x1 + 1
P 0
(x) = 4x3 + 3x2 + 2x + 1
000001010
P 0
(1)=4+3+2+1=10
1111100
1111
derivative
2
P (x) = x4 x3 x2 x1 1
P 0
(x) = 4x3
3x2
2x
1
100110001
P 0
(2) = 32
12
4 1 =
49
The output will be stored in a register of FUNCRAM. The index of that register is the rst four bits of the input. Please note that multiple write operation on the same index will overwrite the previous value in that index. The operation will be done with the rising edge of the clock pulse.
Read Mode
In read mode, the value in given index location of FUNCRAM will be returned as output. There will be no write operation to the FUNCRAM in this mode. This operation is combinational, and is not triggered by a clock pulse.
The FUNCROM and FUNCRAM modules will be used by an upper module called FUNCMEMORY. FUNCMEM-ORY is an interface for FUNCROM and FUNCRAM modules. The module de nition of FUNCMEMORY is given below:
module FUNCMEMORY(input mode, input [6:0] memInput, input CLK, output wire [8:0] result)
where mode represents FUNCRAM read/write mode, memInput represents the 7-bit input used in FUNCRAM and FUNCROM modules and result represents the 9-bit output stored in FUNCRAM.
The module de nitions of FUNCROM and FUNCRAM are as follows:
module FUNCROM (input [3:0] romAddress, output reg[4:0] romData)
where romAddress represents the index of ROM register and romData represents the register value given the romAddress value.
module FUNCRAM (input mode,input [3:0] ramAddress, input [4:0] dataIn,input op, input [1:0] arg, input CLK, output reg [8:0] dataOut)
where mode represents read/write mode, ramAddress represents the index of the FUNCRAM register to store the output, dataIn represents the coe cient values of the function, op represents the type of operation (i.e. modulo 7/derivative of the function), arg represents the 2-bit argument of the function and dataOut represents the 9-bit output stored in FUNCRAM.
2
You will implement only FUNCROM and FUNCRAM modules. FUNCMEMORY module will be provided for you and will not be implemented.
Deliverables
Implement both modules in a single Verilog le: lab4 1.v. Do NOT submit your test-benches. You can share your test-benches on the newsgroup.
Submit the le through the COW system before the given deadline. April 18, 2018, 23:59hrs.
This part is supposed to be done individually, not with your partner. Any kind of cheating is not allowed.
3