# Caravel User Project

[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![UPRJ_CI](https://github.com/efabless/caravel_project_example/actions/workflows/user_project_ci.yml/badge.svg)](https://github.com/efabless/caravel_project_example/actions/workflows/user_project_ci.yml) [![Caravel Build](https://github.com/efabless/caravel_project_example/actions/workflows/caravel_build.yml/badge.svg)](https://github.com/efabless/caravel_project_example/actions/workflows/caravel_build.yml)

SPDX-FileCopyrightText: 2020 Efabless Corporation Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. SPDX-License-Identifier: Apache-2.0


Bfloat 16 Precision Floating Point Unit from MERL

This is the first ever Bfloat 16 Precision Floating Point Unit designed by undergraduate students of DHA Suffa University Pakistan.


Directory Structure

    +-- verlog                          #   User verilog Directory

        +-- rtl                         #   RTL
    
        +-- dv                          #   Design Verification
    
        +-- gl                          #   Gate Level Netlis
    
The Floating Point Unit Source Code is avaialable here

    +-- verlog                               #   User verilog Directory
    
        +-- rtl                              #   RTL
        
        |       +-- user_project_wrapper.v       #   User Project Wrapper source file
        
        |       +-- user_proj_example.v          #   User Project Example source file
        
        |       +-- FPU                          #   Floating Point Unit folder
        
        
The Design Verification Testbench is available here

    +-- verlog                               #   User verilog Directory
    
        +-- dv                               #   Design Verification
        
        +-- FPU_Half                         #   Design Test Directory
        
        +-- hex                              #   Hex files folder
        
        +-- asm                              #   Assmebly files folder

The synthesized netlist is present here:
    +-- verlog                               #   User verilog Directory
        
        +-- gl                               #   Gate Level Netlis
        
        +-- user_project_wrapper.v       #   User Project Wrapper Netlist
        
        +-- user_proj_example.v          #   User Project Example Netlist

The hardened macros are placed here:

    +-- def                                 #    def Directory
        
        +-- user_project_wrapper.def        #    User Project Wrapper def file

    +-- lef                                 #    lef Directory
    
        +-- user_project_wrapper.lef        #    User Project Wrapper lef file
    
        +-- user_proj_example.lef           #    User Project Example lef file

    +-- gds                                 #    gds Directory
    
        +-- user_project_wrapper.gdz.gz     #    User Project Wrapper gds
    
        +-- user_proj_example.gdz.gz        #    User Project Example gds

Testing of Design

Go to verilog/dv/FPU_Bfloat/ directory

Set the GCC_PATH environment variable.

Set the PDK_PATH environment variable.

Copy the given program hex file into uart.hex.

run the make commad for RTL simulation

run the SIM=GL make command for netlist simulation

Note: Dont forget to add 00000010 and 00000FFF instruction in the end of the uart.hex to stop the uart transmission if you are using your own codes.
