Last time, an Arithmetic Logic Unit (ALU) is designed and implemented in VHDL. Full VHDL code for the ALU was presented.
Today, fpga4student presents the Verilog code for the ALU. The testbench Verilog code for the ALU is also provided for simulation.
Verilog code for the ALU:
/* ALU Arithmetic and Logic Operations ---------------------------------------------------------------------- |ALU_Sel| ALU Operation ---------------------------------------------------------------------- | 0000 | ALU_Out = A + B; ---------------------------------------------------------------------- | 0001 | ALU_Out = A - B; ---------------------------------------------------------------------- | 0010 | ALU_Out = A * B; ---------------------------------------------------------------------- | 0011 | ALU_Out = A / B; ---------------------------------------------------------------------- | 0100 | ALU_Out = A << 1; ---------------------------------------------------------------------- | 0101 | ALU_Out = A >> 1; ---------------------------------------------------------------------- | 0110 | ALU_Out = A rotated left by 1; ---------------------------------------------------------------------- | 0111 | ALU_Out = A rotated right by 1; ---------------------------------------------------------------------- | 1000 | ALU_Out = A and B; ---------------------------------------------------------------------- | 1001 | ALU_Out = A or B; ---------------------------------------------------------------------- | 1010 | ALU_Out = A xor B; ---------------------------------------------------------------------- | 1011 | ALU_Out = A nor B; ---------------------------------------------------------------------- | 1100 | ALU_Out = A nand B; ---------------------------------------------------------------------- | 1101 | ALU_Out = A xnor B; ---------------------------------------------------------------------- | 1110 | ALU_Out = 1 if A>B else 0; ---------------------------------------------------------------------- | 1111 | ALU_Out = 1 if A=B else 0; ----------------------------------------------------------------------*/ // fpga4student.com: FPGA projects, Verilog projects, VHDL projects // Verilog project: Verilog code for ALU // by FPGA4STUDENT module alu( input [7:0] A,B, // ALU 8-bit Inputs input [3:0] ALU_Sel,// ALU Selection output [7:0] ALU_Out, // ALU 8-bit Output output CarryOut // Carry Out Flag ); reg [7:0] ALU_Result; wire [8:0] tmp; assign ALU_Out = ALU_Result; // ALU out assign tmp = {1'b0,A} + {1'b0,B}; assign CarryOut = tmp[8]; // Carryout flag always @(*) begin case(ALU_Sel) 4'b0000: // Addition ALU_Result = A + B ; 4'b0001: // Subtraction ALU_Result = A - B ; 4'b0010: // Multiplication ALU_Result = A * B; 4'b0011: // Division ALU_Result = A/B; 4'b0100: // Logical shift left ALU_Result = A<<1; 4'b0101: // Logical shift right ALU_Result = A>>1; 4'b0110: // Rotate left ALU_Result = {A[6:0],A[7]}; 4'b0111: // Rotate right ALU_Result = {A[0],A[7:1]}; 4'b1000: // Logical and ALU_Result = A & B; 4'b1001: // Logical or ALU_Result = A | B; 4'b1010: // Logical xor ALU_Result = A ^ B; 4'b1011: // Logical nor ALU_Result = ~(A | B); 4'b1100: // Logical nand ALU_Result = ~(A & B); 4'b1101: // Logical xnor ALU_Result = ~(A ^ B); 4'b1110: // Greater comparison ALU_Result = (A>B)?8'd1:8'd0 ; 4'b1111: // Equal comparison ALU_Result = (A==B)?8'd1:8'd0 ; default: ALU_Result = A + B ; endcase end endmodule
Testbench Verilog code for the ALU:
// fpga4student.com: FPGA projects, Verilog projects, VHDL projects // Verilog project: Verilog code for ALU // by FPGA4STUDENT `timescale 1ns / 1ps module tb_alu; //Inputs reg[7:0] A,B; reg[3:0] ALU_Sel; //Outputs wire[7:0] ALU_Out; wire CarryOut; // Verilog code for ALU integer i; alu test_unit( A,B, // ALU 8-bit Inputs ALU_Sel,// ALU Selection ALU_Out, // ALU 8-bit Output CarryOut // Carry Out Flag ); initial begin // hold reset state for 100 ns. A = 8'h0A; B = 4'h02; ALU_Sel = 4'h0; for (i=0;i<=15;i=i+1) begin ALU_Sel = ALU_Sel + 8'h01; #10; end; A = 8'hF6; B = 8'h0A; end endmodule
Simulation waveform for the ALU:
Recommended Verilog projects:
2. Verilog code for FIFO memory
3. Verilog code for 16-bit single-cycle MIPS processor
4. Programmable Digital Delay Timer in Verilog HDL
5. Verilog code for basic logic components in digital circuits
6. Verilog code for 32-bit Unsigned Divider
7. Verilog code for Fixed-Point Matrix Multiplication
8. Plate License Recognition in Verilog HDL
9. Verilog code for Carry-Look-Ahead Multiplier
10. Verilog code for a Microcontroller
11. Verilog code for 4x4 Multiplier
12. Verilog code for Car Parking System
13. Image processing on FPGA using Verilog HDL
14. How to load a text file into FPGA using Verilog HDL
15. Verilog code for Traffic Light Controller
16. Verilog code for Alarm Clock on FPGA
17. Verilog code for comparator design
18. Verilog code for D Flip Flop
19. Verilog code for Full Adder
20. Verilog code for counter with testbench
21. Verilog code for 16-bit RISC Processor
22. Verilog code for button debouncing on FPGA
23. How to write Verilog Testbench for bidirectional/ inout ports
3. Verilog code for 16-bit single-cycle MIPS processor
4. Programmable Digital Delay Timer in Verilog HDL
5. Verilog code for basic logic components in digital circuits
6. Verilog code for 32-bit Unsigned Divider
7. Verilog code for Fixed-Point Matrix Multiplication
8. Plate License Recognition in Verilog HDL
9. Verilog code for Carry-Look-Ahead Multiplier
10. Verilog code for a Microcontroller
11. Verilog code for 4x4 Multiplier
12. Verilog code for Car Parking System
13. Image processing on FPGA using Verilog HDL
14. How to load a text file into FPGA using Verilog HDL
15. Verilog code for Traffic Light Controller
16. Verilog code for Alarm Clock on FPGA
17. Verilog code for comparator design
18. Verilog code for D Flip Flop
19. Verilog code for Full Adder
20. Verilog code for counter with testbench
21. Verilog code for 16-bit RISC Processor
22. Verilog code for button debouncing on FPGA
23. How to write Verilog Testbench for bidirectional/ inout ports
24. Tic Tac Toe Game in Verilog and LogiSim
25. 32-bit 5-stage Pipelined MIPS Processor in Verilog (Part-1)
26. 32-bit 5-stage Pipelined MIPS Processor in Verilog (Part-2)
27. 32-bit 5-stage Pipelined MIPS Processor in Verilog (Part-3)
28. Verilog code for Decoder25. 32-bit 5-stage Pipelined MIPS Processor in Verilog (Part-1)
26. 32-bit 5-stage Pipelined MIPS Processor in Verilog (Part-2)
27. 32-bit 5-stage Pipelined MIPS Processor in Verilog (Part-3)
29. Verilog code for Multiplexers
30. N-bit Adder Design in Verilog
31. Verilog vs VHDL: Explain by Examples
32. Verilog code for Clock divider on FPGA
33. How to generate a clock enable signal in Verilog
34. Verilog code for PWM Generator
35. Verilog coding vs Software Programming
36. Verilog code for Moore FSM Sequence Detector
37. Verilog code for 7-segment display controller on Basys 3 FPGA
when i run the test bench initial addition operation is somehow skipped. how can it be corrected?
ReplyDeleteI guess you did not "Zoom Fit" to see the whole simulation waveform.
DeleteAre the /,* and % operator synthesizable in verilog. Can they go into real FPGA
ReplyDeleteIs there a program design in 2 bit calculator with operation addition,subtraction, and multiplication ?
ReplyDelete