mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	Started to integrate OSU divider
This commit is contained in:
		
							parent
							
								
									a7dd20b388
								
							
						
					
					
						commit
						e64e8afb7f
					
				
							
								
								
									
										1
									
								
								wally-pipelined/src/muldiv/div/README
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										1
									
								
								wally-pipelined/src/muldiv/div/README
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					vsim -do iter64.do -c
 | 
				
			||||||
							
								
								
									
										22
									
								
								wally-pipelined/src/muldiv/div/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								wally-pipelined/src/muldiv/div/README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					This is a novel integer divider using r4 division by recurrence.  The
 | 
				
			||||||
 | 
					reference is:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					J. E. Stine and K. Hill, "An Efficient Implementation of Radix-4
 | 
				
			||||||
 | 
					Integer Division Using Scaling," 2020 IEEE 63rd International Midwest
 | 
				
			||||||
 | 
					Symposium on Circuits and Systems (MWSCAS), Springfield, MA, USA,
 | 
				
			||||||
 | 
					2020, pp. 1092-1095, doi: 10.1109/MWSCAS48704.2020.9184631.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Although this version does not contain scaling, it could do this, if
 | 
				
			||||||
 | 
					needed.  Moreover, a higher radix or overlapped radix can be done
 | 
				
			||||||
 | 
					easily to expand the the size.  Also, the implementations here are
 | 
				
			||||||
 | 
					initially unsigned but hope to expand for signed, which should be
 | 
				
			||||||
 | 
					easy.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					There are two types of tests in this directory within each testbench.
 | 
				
			||||||
 | 
					One tests for 32-bits and the other 64-bits:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int32div.do and int64div.do = test individual vector for debugging
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					iter32.do and iter64.do = do not use any waveform generation and just
 | 
				
			||||||
 | 
					output lots of tests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										1302
									
								
								wally-pipelined/src/muldiv/div/divide4x32.sv
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										1302
									
								
								wally-pipelined/src/muldiv/div/divide4x32.sv
									
									
									
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1921
									
								
								wally-pipelined/src/muldiv/div/divide4x64.sv
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										1921
									
								
								wally-pipelined/src/muldiv/div/divide4x64.sv
									
									
									
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										114
									
								
								wally-pipelined/src/muldiv/div/int32div.do
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										114
									
								
								wally-pipelined/src/muldiv/div/int32div.do
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,114 @@
 | 
				
			|||||||
 | 
					# Copyright 1991-2007 Mentor Graphics Corporation
 | 
				
			||||||
 | 
					# 
 | 
				
			||||||
 | 
					# Modification by Oklahoma State University
 | 
				
			||||||
 | 
					# Use with Testbench 
 | 
				
			||||||
 | 
					# James Stine, 2008
 | 
				
			||||||
 | 
					# Go Cowboys!!!!!!
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# All Rights Reserved.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION
 | 
				
			||||||
 | 
					# WHICH IS THE PROPERTY OF MENTOR GRAPHICS CORPORATION
 | 
				
			||||||
 | 
					# OR ITS LICENSORS AND IS SUBJECT TO LICENSE TERMS.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Use this run.do file to run this example.
 | 
				
			||||||
 | 
					# Either bring up ModelSim and type the following at the "ModelSim>" prompt:
 | 
				
			||||||
 | 
					#     do run.do
 | 
				
			||||||
 | 
					# or, to run from a shell, type the following at the shell prompt:
 | 
				
			||||||
 | 
					#     vsim -do run.do -c
 | 
				
			||||||
 | 
					# (omit the "-c" to see the GUI while running from the shell)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					onbreak {resume}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# create library
 | 
				
			||||||
 | 
					if [file exists work] {
 | 
				
			||||||
 | 
					    vdel -all
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					vlib work
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# compile source files
 | 
				
			||||||
 | 
					vlog muxs.sv shifters.sv divide4x32.sv test_int32div.sv
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# start and run simulation
 | 
				
			||||||
 | 
					vsim -voptargs=+acc work.tb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					view list
 | 
				
			||||||
 | 
					view wave
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- display input and output signals as hexidecimal values
 | 
				
			||||||
 | 
					# Diplays All Signals recursively
 | 
				
			||||||
 | 
					add wave -noupdate -divider -height 32 "Control Signals"
 | 
				
			||||||
 | 
					add wave -hex -color gold /tb/clk
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/reset
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/start
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/done
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/divdone
 | 
				
			||||||
 | 
					add wave -noupdate -divider -height 32 "Key Parts"
 | 
				
			||||||
 | 
					add wave -unsigned /tb/dut/NumIter
 | 
				
			||||||
 | 
					add wave -unsigned /tb/dut/RemShift
 | 
				
			||||||
 | 
					add wave -unsigned /tb/dut/Qd2
 | 
				
			||||||
 | 
					add wave -unsigned /tb/dut/Rd2
 | 
				
			||||||
 | 
					add wave -unsigned /tb/dut/rem0
 | 
				
			||||||
 | 
					add wave -unsigned /tb/dut/Q
 | 
				
			||||||
 | 
					add wave -unsigned /tb/dut/P
 | 
				
			||||||
 | 
					add wave -unsigned /tb/dut/shiftResult
 | 
				
			||||||
 | 
					add wave -noupdate -divider -height 32 "FSM"
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/fsm1/CURRENT_STATE
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/fsm1/NEXT_STATE
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/dut/fsm1/start
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/dut/fsm1/state0
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/dut/fsm1/done
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/dut/fsm1/en
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/dut/fsm1/divdone
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/dut/fsm1/reset
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/dut/fsm1/otfzero
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/dut/fsm1/LT
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/dut/fsm1/EQ
 | 
				
			||||||
 | 
					add wave -hex -color gold /tb/dut/fsm1/clk
 | 
				
			||||||
 | 
					add wave -noupdate -divider -height 32 "Datapath"
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/N
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/D
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/reset
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/start
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/Q
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/rem0
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/div0
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/done
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/divdone   
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/enable
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/state0
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/V   
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/Num
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/P
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/NumIter
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/RemShift
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/op1
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/op2
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/op1shift
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/Rem5
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/Qd
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/Rd
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/Qd2
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/Rd2
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/quotient
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/otfzero   
 | 
				
			||||||
 | 
					add wave -noupdate -divider -height 32 "Divider"
 | 
				
			||||||
 | 
					add wave -hex -r /tb/dut/p3/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Set Wave Output Items 
 | 
				
			||||||
 | 
					TreeUpdate [SetDefaultTree]
 | 
				
			||||||
 | 
					WaveRestoreZoom {0 ps} {75 ns}
 | 
				
			||||||
 | 
					configure wave -namecolwidth 150
 | 
				
			||||||
 | 
					configure wave -valuecolwidth 100
 | 
				
			||||||
 | 
					configure wave -justifyvalue left
 | 
				
			||||||
 | 
					configure wave -signalnamewidth 0
 | 
				
			||||||
 | 
					configure wave -snapdistance 10
 | 
				
			||||||
 | 
					configure wave -datasetprefix 0
 | 
				
			||||||
 | 
					configure wave -rowmargin 4
 | 
				
			||||||
 | 
					configure wave -childrowmargin 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Run the Simulation
 | 
				
			||||||
 | 
					run 138ns
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										114
									
								
								wally-pipelined/src/muldiv/div/int64div.do
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										114
									
								
								wally-pipelined/src/muldiv/div/int64div.do
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,114 @@
 | 
				
			|||||||
 | 
					# Copyright 1991-2007 Mentor Graphics Corporation
 | 
				
			||||||
 | 
					# 
 | 
				
			||||||
 | 
					# Modification by Oklahoma State University
 | 
				
			||||||
 | 
					# Use with Testbench 
 | 
				
			||||||
 | 
					# James Stine, 2008
 | 
				
			||||||
 | 
					# Go Cowboys!!!!!!
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# All Rights Reserved.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION
 | 
				
			||||||
 | 
					# WHICH IS THE PROPERTY OF MENTOR GRAPHICS CORPORATION
 | 
				
			||||||
 | 
					# OR ITS LICENSORS AND IS SUBJECT TO LICENSE TERMS.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Use this run.do file to run this example.
 | 
				
			||||||
 | 
					# Either bring up ModelSim and type the following at the "ModelSim>" prompt:
 | 
				
			||||||
 | 
					#     do run.do
 | 
				
			||||||
 | 
					# or, to run from a shell, type the following at the shell prompt:
 | 
				
			||||||
 | 
					#     vsim -do run.do -c
 | 
				
			||||||
 | 
					# (omit the "-c" to see the GUI while running from the shell)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					onbreak {resume}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# create library
 | 
				
			||||||
 | 
					if [file exists work] {
 | 
				
			||||||
 | 
					    vdel -all
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					vlib work
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# compile source files
 | 
				
			||||||
 | 
					vlog muxs.sv shifters.sv divide4x64.sv test_int64div.sv
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# start and run simulation
 | 
				
			||||||
 | 
					vsim -voptargs=+acc work.tb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					view list
 | 
				
			||||||
 | 
					view wave
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- display input and output signals as hexidecimal values
 | 
				
			||||||
 | 
					# Diplays All Signals recursively
 | 
				
			||||||
 | 
					add wave -noupdate -divider -height 32 "Control Signals"
 | 
				
			||||||
 | 
					add wave -hex -color gold /tb/clk
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/reset
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/start
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/done
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/divdone
 | 
				
			||||||
 | 
					add wave -noupdate -divider -height 32 "Key Parts"
 | 
				
			||||||
 | 
					add wave -unsigned /tb/dut/NumIter
 | 
				
			||||||
 | 
					add wave -unsigned /tb/dut/RemShift
 | 
				
			||||||
 | 
					add wave -unsigned /tb/dut/Qd2
 | 
				
			||||||
 | 
					add wave -unsigned /tb/dut/Rd2
 | 
				
			||||||
 | 
					add wave -unsigned /tb/dut/rem0
 | 
				
			||||||
 | 
					add wave -unsigned /tb/dut/Q
 | 
				
			||||||
 | 
					add wave -unsigned /tb/dut/P
 | 
				
			||||||
 | 
					add wave -unsigned /tb/dut/shiftResult
 | 
				
			||||||
 | 
					add wave -noupdate -divider -height 32 "FSM"
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/fsm1/CURRENT_STATE
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/fsm1/NEXT_STATE
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/dut/fsm1/start
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/dut/fsm1/state0
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/dut/fsm1/done
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/dut/fsm1/en
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/dut/fsm1/divdone
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/dut/fsm1/reset
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/dut/fsm1/otfzero
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/dut/fsm1/LT
 | 
				
			||||||
 | 
					add wave -hex -color #0080ff /tb/dut/fsm1/EQ
 | 
				
			||||||
 | 
					add wave -hex -color gold /tb/dut/fsm1/clk
 | 
				
			||||||
 | 
					add wave -noupdate -divider -height 32 "Datapath"
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/N
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/D
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/reset
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/start
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/Q
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/rem0
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/div0
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/done
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/divdone   
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/enable
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/state0
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/V   
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/Num
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/P
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/NumIter
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/RemShift
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/op1
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/op2
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/op1shift
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/Rem5
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/Qd
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/Rd
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/Qd2
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/Rd2
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/quotient
 | 
				
			||||||
 | 
					add wave -hex /tb/dut/otfzero   
 | 
				
			||||||
 | 
					add wave -noupdate -divider -height 32 "Divider"
 | 
				
			||||||
 | 
					add wave -hex -r /tb/dut/p3/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Set Wave Output Items 
 | 
				
			||||||
 | 
					TreeUpdate [SetDefaultTree]
 | 
				
			||||||
 | 
					WaveRestoreZoom {0 ps} {75 ns}
 | 
				
			||||||
 | 
					configure wave -namecolwidth 150
 | 
				
			||||||
 | 
					configure wave -valuecolwidth 100
 | 
				
			||||||
 | 
					configure wave -justifyvalue left
 | 
				
			||||||
 | 
					configure wave -signalnamewidth 0
 | 
				
			||||||
 | 
					configure wave -snapdistance 10
 | 
				
			||||||
 | 
					configure wave -datasetprefix 0
 | 
				
			||||||
 | 
					configure wave -rowmargin 4
 | 
				
			||||||
 | 
					configure wave -childrowmargin 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Run the Simulation
 | 
				
			||||||
 | 
					run 138ns
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										50
									
								
								wally-pipelined/src/muldiv/div/iter32.do
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										50
									
								
								wally-pipelined/src/muldiv/div/iter32.do
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,50 @@
 | 
				
			|||||||
 | 
					# Copyright 1991-2007 Mentor Graphics Corporation
 | 
				
			||||||
 | 
					# 
 | 
				
			||||||
 | 
					# Modification by Oklahoma State University
 | 
				
			||||||
 | 
					# Use with Testbench 
 | 
				
			||||||
 | 
					# James Stine, 2008
 | 
				
			||||||
 | 
					# Go Cowboys!!!!!!
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# All Rights Reserved.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION
 | 
				
			||||||
 | 
					# WHICH IS THE PROPERTY OF MENTOR GRAPHICS CORPORATION
 | 
				
			||||||
 | 
					# OR ITS LICENSORS AND IS SUBJECT TO LICENSE TERMS.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Use this run.do file to run this example.
 | 
				
			||||||
 | 
					# Either bring up ModelSim and type the following at the "ModelSim>" prompt:
 | 
				
			||||||
 | 
					#     do run.do
 | 
				
			||||||
 | 
					# or, to run from a shell, type the following at the shell prompt:
 | 
				
			||||||
 | 
					#     vsim -do run.do -c
 | 
				
			||||||
 | 
					# (omit the "-c" to see the GUI while running from the shell)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					onbreak {resume}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# create library
 | 
				
			||||||
 | 
					if [file exists work] {
 | 
				
			||||||
 | 
					    vdel -all
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					vlib work
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# compile source files
 | 
				
			||||||
 | 
					vlog muxs.sv shifters.sv divide4x32.sv test_iter32.sv
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# start and run simulation
 | 
				
			||||||
 | 
					vsim -voptargs=+acc work.tb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Set Wave Output Items 
 | 
				
			||||||
 | 
					TreeUpdate [SetDefaultTree]
 | 
				
			||||||
 | 
					WaveRestoreZoom {0 ps} {75 ns}
 | 
				
			||||||
 | 
					configure wave -namecolwidth 150
 | 
				
			||||||
 | 
					configure wave -valuecolwidth 100
 | 
				
			||||||
 | 
					configure wave -justifyvalue left
 | 
				
			||||||
 | 
					configure wave -signalnamewidth 0
 | 
				
			||||||
 | 
					configure wave -snapdistance 10
 | 
				
			||||||
 | 
					configure wave -datasetprefix 0
 | 
				
			||||||
 | 
					configure wave -rowmargin 4
 | 
				
			||||||
 | 
					configure wave -childrowmargin 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Run the Simulation
 | 
				
			||||||
 | 
					run 9586700ns
 | 
				
			||||||
 | 
					quit
 | 
				
			||||||
							
								
								
									
										50
									
								
								wally-pipelined/src/muldiv/div/iter64.do
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										50
									
								
								wally-pipelined/src/muldiv/div/iter64.do
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,50 @@
 | 
				
			|||||||
 | 
					# Copyright 1991-2007 Mentor Graphics Corporation
 | 
				
			||||||
 | 
					# 
 | 
				
			||||||
 | 
					# Modification by Oklahoma State University
 | 
				
			||||||
 | 
					# Use with Testbench 
 | 
				
			||||||
 | 
					# James Stine, 2008
 | 
				
			||||||
 | 
					# Go Cowboys!!!!!!
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# All Rights Reserved.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION
 | 
				
			||||||
 | 
					# WHICH IS THE PROPERTY OF MENTOR GRAPHICS CORPORATION
 | 
				
			||||||
 | 
					# OR ITS LICENSORS AND IS SUBJECT TO LICENSE TERMS.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Use this run.do file to run this example.
 | 
				
			||||||
 | 
					# Either bring up ModelSim and type the following at the "ModelSim>" prompt:
 | 
				
			||||||
 | 
					#     do run.do
 | 
				
			||||||
 | 
					# or, to run from a shell, type the following at the shell prompt:
 | 
				
			||||||
 | 
					#     vsim -do run.do -c
 | 
				
			||||||
 | 
					# (omit the "-c" to see the GUI while running from the shell)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					onbreak {resume}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# create library
 | 
				
			||||||
 | 
					if [file exists work] {
 | 
				
			||||||
 | 
					    vdel -all
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					vlib work
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# compile source files
 | 
				
			||||||
 | 
					vlog muxs.sv shifters.sv divide4x64.sv test_iter64.sv
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# start and run simulation
 | 
				
			||||||
 | 
					vsim -voptargs=+acc work.tb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Set Wave Output Items 
 | 
				
			||||||
 | 
					TreeUpdate [SetDefaultTree]
 | 
				
			||||||
 | 
					WaveRestoreZoom {0 ps} {75 ns}
 | 
				
			||||||
 | 
					configure wave -namecolwidth 150
 | 
				
			||||||
 | 
					configure wave -valuecolwidth 100
 | 
				
			||||||
 | 
					configure wave -justifyvalue left
 | 
				
			||||||
 | 
					configure wave -signalnamewidth 0
 | 
				
			||||||
 | 
					configure wave -snapdistance 10
 | 
				
			||||||
 | 
					configure wave -datasetprefix 0
 | 
				
			||||||
 | 
					configure wave -rowmargin 4
 | 
				
			||||||
 | 
					configure wave -childrowmargin 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Run the Simulation
 | 
				
			||||||
 | 
					run 9586700ns
 | 
				
			||||||
 | 
					quit
 | 
				
			||||||
							
								
								
									
										51
									
								
								wally-pipelined/src/muldiv/div/muxs.sv
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								wally-pipelined/src/muldiv/div/muxs.sv
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,51 @@
 | 
				
			|||||||
 | 
					module mux2 #(parameter WIDTH = 8)
 | 
				
			||||||
 | 
					   (input  logic [WIDTH-1:0] d0, d1, 
 | 
				
			||||||
 | 
					    input logic 	     s, 
 | 
				
			||||||
 | 
					    output logic [WIDTH-1:0] y);
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   assign y = s ? d1 : d0;
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					endmodule // mux2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module mux3 #(parameter WIDTH = 8)
 | 
				
			||||||
 | 
					   (input  logic [WIDTH-1:0] d0, d1, d2,
 | 
				
			||||||
 | 
					    input logic [1:0] 	     s, 
 | 
				
			||||||
 | 
					    output logic [WIDTH-1:0] y);
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   assign y = s[1] ? d2 : (s[0] ? d1 : d0);
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					endmodule // mux3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module mux4 #(parameter WIDTH = 8)
 | 
				
			||||||
 | 
					   (input  logic [WIDTH-1:0] d0, d1, d2, d3,
 | 
				
			||||||
 | 
					    input logic [1:0] 	     s, 
 | 
				
			||||||
 | 
					    output logic [WIDTH-1:0] y);
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   assign y = s[1] ? (s[0] ? d3 : d2) : (s[0] ? d1 : d0);
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					endmodule // mux4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module mux21x32 (Z, A, B, Sel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   input logic [31:0]  A;
 | 
				
			||||||
 | 
					   input logic [31:0]  B;
 | 
				
			||||||
 | 
					   input logic	       Sel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   output logic [31:0] Z;
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   assign Z = Sel ? B : A;
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					endmodule // mux21x32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module mux21x64 (Z, A, B, Sel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   input logic [63:0]  A;
 | 
				
			||||||
 | 
					   input logic [63:0]  B;
 | 
				
			||||||
 | 
					   input logic 	       Sel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   output logic [63:0] Z;
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   assign Z = Sel ? B : A;
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					endmodule // mux21x64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										106
									
								
								wally-pipelined/src/muldiv/div/shifters.sv
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								wally-pipelined/src/muldiv/div/shifters.sv
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,106 @@
 | 
				
			|||||||
 | 
					module shifter_l64 (Z, A, Shift);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   input logic [63:0]  A;
 | 
				
			||||||
 | 
					   input logic [5:0]   Shift;
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   logic [63:0]        stage1;
 | 
				
			||||||
 | 
					   logic [63:0]        stage2;
 | 
				
			||||||
 | 
					   logic [63:0]        stage3;
 | 
				
			||||||
 | 
					   logic [63:0]        stage4;
 | 
				
			||||||
 | 
					   logic [63:0]        stage5;   
 | 
				
			||||||
 | 
					   logic [31:0]        thirtytwozeros = 32'h0;
 | 
				
			||||||
 | 
					   logic [15:0]        sixteenzeros = 16'h0;
 | 
				
			||||||
 | 
					   logic [ 7:0]        eightzeros = 8'h0;
 | 
				
			||||||
 | 
					   logic [ 3:0]        fourzeros = 4'h0;
 | 
				
			||||||
 | 
					   logic [ 1:0]        twozeros = 2'b00;
 | 
				
			||||||
 | 
					   logic 	       onezero = 1'b0;   
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   output logic [63:0] Z;      
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   mux21x64  mx01(stage1, A,      {A[31:0], thirtytwozeros}, Shift[5]);   
 | 
				
			||||||
 | 
					   mux21x64  mx02(stage2, stage1, {stage1[47:0], sixteenzeros}, Shift[4]);
 | 
				
			||||||
 | 
					   mux21x64  mx03(stage3, stage2, {stage2[55:0], eightzeros}, Shift[3]);
 | 
				
			||||||
 | 
					   mux21x64  mx04(stage4, stage3, {stage3[59:0], fourzeros}, Shift[2]);
 | 
				
			||||||
 | 
					   mux21x64  mx05(stage5, stage4, {stage4[61:0], twozeros}, Shift[1]);
 | 
				
			||||||
 | 
					   mux21x64  mx06(Z, stage5, {stage5[62:0], onezero}, Shift[0]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					endmodule // shifter_l64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module shifter_r64 (Z, A, Shift);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   input logic [63:0]  A;
 | 
				
			||||||
 | 
					   input logic [5:0]   Shift;
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   logic [63:0]        stage1;
 | 
				
			||||||
 | 
					   logic [63:0]        stage2;
 | 
				
			||||||
 | 
					   logic [63:0]        stage3;
 | 
				
			||||||
 | 
					   logic [63:0]        stage4;
 | 
				
			||||||
 | 
					   logic [63:0]        stage5;   		  
 | 
				
			||||||
 | 
					   logic [31:0]        thirtytwozeros = 32'h0;		  
 | 
				
			||||||
 | 
					   logic [15:0]        sixteenzeros = 16'h0;
 | 
				
			||||||
 | 
					   logic [ 7:0]        eightzeros = 8'h0;
 | 
				
			||||||
 | 
					   logic [ 3:0]        fourzeros = 4'h0;
 | 
				
			||||||
 | 
					   logic [ 1:0]        twozeros = 2'b00;
 | 
				
			||||||
 | 
					   logic 	       onezero = 1'b0;   
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   output logic [63:0] Z;
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   mux21x64  mx01(stage1, A, {thirtytwozeros, A[63:32]}, Shift[5]);		  
 | 
				
			||||||
 | 
					   mux21x64  mx02(stage2, stage1, {sixteenzeros, stage1[63:16]}, Shift[4]);
 | 
				
			||||||
 | 
					   mux21x64  mx03(stage3, stage2, {eightzeros, stage2[63:8]}, Shift[3]);
 | 
				
			||||||
 | 
					   mux21x64  mx04(stage4, stage3, {fourzeros, stage3[63:4]}, Shift[2]);
 | 
				
			||||||
 | 
					   mux21x64  mx05(stage5, stage4, {twozeros, stage4[63:2]}, Shift[1]);
 | 
				
			||||||
 | 
					   mux21x64  mx06(Z, stage5, {onezero, stage5[63:1]},  Shift[0]);
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					endmodule // shifter_r64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module shifter_l32 (Z, A, Shift);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   input logic [31:0]  A;
 | 
				
			||||||
 | 
					   input logic [4:0]   Shift;
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   logic [31:0]        stage1;
 | 
				
			||||||
 | 
					   logic [31:0]        stage2;
 | 
				
			||||||
 | 
					   logic [31:0]        stage3;
 | 
				
			||||||
 | 
					   logic [31:0]        stage4;
 | 
				
			||||||
 | 
					   logic [15:0]        sixteenzeros = 16'h0;
 | 
				
			||||||
 | 
					   logic [ 7:0]        eightzeros = 8'h0;
 | 
				
			||||||
 | 
					   logic [ 3:0]        fourzeros = 4'h0;
 | 
				
			||||||
 | 
					   logic [ 1:0]        twozeros = 2'b00;
 | 
				
			||||||
 | 
					   logic 	       onezero = 1'b0;   
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   output logic [31:0] Z;      
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   mux21x32  mx01(stage1, A,      {A[15:0], sixteenzeros},    Shift[4]);
 | 
				
			||||||
 | 
					   mux21x32  mx02(stage2, stage1, {stage1[23:0], eightzeros}, Shift[3]);
 | 
				
			||||||
 | 
					   mux21x32  mx03(stage3, stage2, {stage2[27:0], fourzeros},  Shift[2]);
 | 
				
			||||||
 | 
					   mux21x32  mx04(stage4, stage3, {stage3[29:0], twozeros},   Shift[1]);
 | 
				
			||||||
 | 
					   mux21x32  mx05(Z     , stage4, {stage4[30:0], onezero},    Shift[0]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					endmodule // shifter_l32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module shifter_r32 (Z, A, Shift);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   input logic [31:0]  A;
 | 
				
			||||||
 | 
					   input logic [4:0]   Shift;
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   logic [31:0]        stage1;
 | 
				
			||||||
 | 
					   logic [31:0]        stage2;
 | 
				
			||||||
 | 
					   logic [31:0]        stage3;
 | 
				
			||||||
 | 
					   logic [31:0]        stage4;
 | 
				
			||||||
 | 
					   logic [15:0]        sixteenzeros = 16'h0;
 | 
				
			||||||
 | 
					   logic [ 7:0]        eightzeros = 8'h0;
 | 
				
			||||||
 | 
					   logic [ 3:0]        fourzeros = 4'h0;
 | 
				
			||||||
 | 
					   logic [ 1:0]        twozeros = 2'b00;
 | 
				
			||||||
 | 
					   logic 	       onezero = 1'b0;   
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   output logic [31:0] Z;
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   mux21x32  mx01(stage1, A,      {sixteenzeros, A[31:16]},   Shift[4]);
 | 
				
			||||||
 | 
					   mux21x32  mx02(stage2, stage1, {eightzeros, stage1[31:8]}, Shift[3]);
 | 
				
			||||||
 | 
					   mux21x32  mx03(stage3, stage2, {fourzeros, stage2[31:4]},  Shift[2]);
 | 
				
			||||||
 | 
					   mux21x32  mx04(stage4, stage3, {twozeros, stage3[31:2]},   Shift[1]);
 | 
				
			||||||
 | 
					   mux21x32  mx05(Z     , stage4, {onezero, stage4[31:1]},    Shift[0]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					endmodule // shifter_r32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										50
									
								
								wally-pipelined/src/muldiv/div/test_int32div.sv
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										50
									
								
								wally-pipelined/src/muldiv/div/test_int32div.sv
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,50 @@
 | 
				
			|||||||
 | 
					module tb;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   logic [31:0]  N, D;
 | 
				
			||||||
 | 
					   logic 	 clk;
 | 
				
			||||||
 | 
					   logic 	 reset;   
 | 
				
			||||||
 | 
					   logic 	 start;
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   logic [31:0]  Q;
 | 
				
			||||||
 | 
					   logic [31:0]  rem;
 | 
				
			||||||
 | 
					   logic 	 div0;
 | 
				
			||||||
 | 
					   logic 	 done;
 | 
				
			||||||
 | 
					   logic 	 divdone;   
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   integer 	 handle3;
 | 
				
			||||||
 | 
					   integer 	 desc3;
 | 
				
			||||||
 | 
					   integer 	 i;   
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   logic [7:0] 	 count [0:15];   
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   int32div dut (Q, done, divdone, rem, div0, N, D, clk, reset, start);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   initial 
 | 
				
			||||||
 | 
					     begin	
 | 
				
			||||||
 | 
						clk = 1'b0;
 | 
				
			||||||
 | 
						forever #5 clk = ~clk;
 | 
				
			||||||
 | 
					     end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   initial
 | 
				
			||||||
 | 
					     begin
 | 
				
			||||||
 | 
						#800 $finish;		
 | 
				
			||||||
 | 
					     end
 | 
				
			||||||
 | 
						     
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   initial
 | 
				
			||||||
 | 
					     begin
 | 
				
			||||||
 | 
						#0  N = 32'h0;
 | 
				
			||||||
 | 
						#0  D = 32'h0;
 | 
				
			||||||
 | 
						#0  start = 1'b0;	
 | 
				
			||||||
 | 
						#0  reset = 1'b1;
 | 
				
			||||||
 | 
						#22 reset = 1'b0;	
 | 
				
			||||||
 | 
						//#25 N = 32'h9830_07C0;
 | 
				
			||||||
 | 
						//#0  D = 32'h0000_000C;
 | 
				
			||||||
 | 
						#25 N = 32'h06b9_7b0d;	
 | 
				
			||||||
 | 
						#0  D = 32'h46df_998d;	
 | 
				
			||||||
 | 
						#0  start = 1'b1;
 | 
				
			||||||
 | 
						#50 start = 1'b0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					endmodule // tb
 | 
				
			||||||
							
								
								
									
										51
									
								
								wally-pipelined/src/muldiv/div/test_int64div.sv
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								wally-pipelined/src/muldiv/div/test_int64div.sv
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,51 @@
 | 
				
			|||||||
 | 
					module tb;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   logic [63:0]  N, D;
 | 
				
			||||||
 | 
					   logic 	 clk;
 | 
				
			||||||
 | 
					   logic 	 reset;   
 | 
				
			||||||
 | 
					   logic 	 start;
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   logic [63:0]  Q;
 | 
				
			||||||
 | 
					   logic [63:0]  rem;
 | 
				
			||||||
 | 
					   logic 	 div0;
 | 
				
			||||||
 | 
					   logic 	 done;
 | 
				
			||||||
 | 
					   logic 	 divdone;   
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   integer 	 handle3;
 | 
				
			||||||
 | 
					   integer 	 desc3;
 | 
				
			||||||
 | 
					   integer 	 i;   
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   logic [7:0] 	 count [0:15];   
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   int64div dut (Q, done, divdone, rem, div0, N, D, clk, reset, start);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   initial 
 | 
				
			||||||
 | 
					     begin	
 | 
				
			||||||
 | 
						clk = 1'b0;
 | 
				
			||||||
 | 
						forever #5 clk = ~clk;
 | 
				
			||||||
 | 
					     end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   initial
 | 
				
			||||||
 | 
					     begin
 | 
				
			||||||
 | 
						#800 $finish;		
 | 
				
			||||||
 | 
					     end
 | 
				
			||||||
 | 
						     
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   initial
 | 
				
			||||||
 | 
					     begin
 | 
				
			||||||
 | 
						#0  N = 64'h0;
 | 
				
			||||||
 | 
						#0  D = 64'h0;
 | 
				
			||||||
 | 
						#0  start = 1'b0;	
 | 
				
			||||||
 | 
						#0  reset = 1'b1;
 | 
				
			||||||
 | 
						#22 reset = 1'b0;	
 | 
				
			||||||
 | 
						//#25 N = 64'h0000_0000_9830_07C0;
 | 
				
			||||||
 | 
						//#0  D = 64'h0000_0000_0000_000C;
 | 
				
			||||||
 | 
						#25 N = 64'h0000_0000_06b9_7b0d;	
 | 
				
			||||||
 | 
						#0  D = 64'h0000_0000_46df_998d;
 | 
				
			||||||
 | 
						#0  start = 1'b1;
 | 
				
			||||||
 | 
						#50 start = 1'b0;	
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					endmodule // tb
 | 
				
			||||||
							
								
								
									
										74
									
								
								wally-pipelined/src/muldiv/div/test_iter32.sv
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										74
									
								
								wally-pipelined/src/muldiv/div/test_iter32.sv
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,74 @@
 | 
				
			|||||||
 | 
					module tb;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   logic [31:0]  N, D;
 | 
				
			||||||
 | 
					   logic 	 clk;
 | 
				
			||||||
 | 
					   logic 	 reset;   
 | 
				
			||||||
 | 
					   logic 	 start;
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   logic [31:0]  Q;
 | 
				
			||||||
 | 
					   logic [31:0]  rem0;
 | 
				
			||||||
 | 
					   logic 	 div0;
 | 
				
			||||||
 | 
					   logic 	 done;
 | 
				
			||||||
 | 
					   logic 	 divdone;   
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   integer 	 handle3;
 | 
				
			||||||
 | 
					   integer 	 desc3;
 | 
				
			||||||
 | 
					   integer 	 i;   
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   bit [31:0] 	 Ncomp;
 | 
				
			||||||
 | 
					   bit [31:0] 	 Dcomp;
 | 
				
			||||||
 | 
					   bit [31:0] 	 Qcomp;
 | 
				
			||||||
 | 
					   bit [31:0] 	 Rcomp;   
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   logic [7:0] 	 count [0:15];   
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   int32div dut (Q, done, divdone, rem0, div0, N, D, clk, reset, start);
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   initial 
 | 
				
			||||||
 | 
					     begin	
 | 
				
			||||||
 | 
						clk = 1'b0;
 | 
				
			||||||
 | 
						forever #5 clk = ~clk;
 | 
				
			||||||
 | 
					     end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   initial
 | 
				
			||||||
 | 
					     begin
 | 
				
			||||||
 | 
						handle3 = $fopen("iter32.out");
 | 
				
			||||||
 | 
						#8000000 $finish;		
 | 
				
			||||||
 | 
					     end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   always @(posedge clk, posedge reset)
 | 
				
			||||||
 | 
					     begin
 | 
				
			||||||
 | 
						desc3 = handle3;	
 | 
				
			||||||
 | 
						#0  start = 1'b0;
 | 
				
			||||||
 | 
						#0  reset = 1'b1;
 | 
				
			||||||
 | 
						#30 reset = 1'b0;	
 | 
				
			||||||
 | 
						for (i=0; i<2; i=i+1)
 | 
				
			||||||
 | 
						  begin
 | 
				
			||||||
 | 
						     N = $random;
 | 
				
			||||||
 | 
						     D = $random;
 | 
				
			||||||
 | 
						     start <= 1'b1;
 | 
				
			||||||
 | 
						     // Wait 2 cycles (to be sure)
 | 
				
			||||||
 | 
						     repeat (2)
 | 
				
			||||||
 | 
						       @(posedge clk);
 | 
				
			||||||
 | 
						     start <= 1'b0;	     
 | 
				
			||||||
 | 
						     repeat (25)
 | 
				
			||||||
 | 
						       @(posedge clk);
 | 
				
			||||||
 | 
						     Ncomp = N;
 | 
				
			||||||
 | 
						     Dcomp = D;
 | 
				
			||||||
 | 
						     Qcomp = Ncomp/Dcomp;
 | 
				
			||||||
 | 
						     Rcomp = Ncomp%Dcomp;	     
 | 
				
			||||||
 | 
						     $fdisplay(desc3, "%h %h %h %h || %h %h || %b %b", 
 | 
				
			||||||
 | 
							       N, D, Q, rem0, Qcomp, Rcomp, 
 | 
				
			||||||
 | 
							       (Q==Qcomp), (rem0==Rcomp));
 | 
				
			||||||
 | 
						  end // for (i=0; i<2, i=i+1)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					     end 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					endmodule // tb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										72
									
								
								wally-pipelined/src/muldiv/div/test_iter64.sv
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										72
									
								
								wally-pipelined/src/muldiv/div/test_iter64.sv
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,72 @@
 | 
				
			|||||||
 | 
					module tb;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   logic [63:0]  N, D;
 | 
				
			||||||
 | 
					   logic 	 clk;
 | 
				
			||||||
 | 
					   logic 	 reset;   
 | 
				
			||||||
 | 
					   logic 	 start;
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   logic [63:0]  Q;
 | 
				
			||||||
 | 
					   logic [63:0]  rem0;
 | 
				
			||||||
 | 
					   logic 	 div0;
 | 
				
			||||||
 | 
					   logic 	 done;
 | 
				
			||||||
 | 
					   logic 	 divdone;   
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   integer 	 handle3;
 | 
				
			||||||
 | 
					   integer 	 desc3;
 | 
				
			||||||
 | 
					   integer 	 i;   
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   bit [63:0] 	 Ncomp;
 | 
				
			||||||
 | 
					   bit [63:0] 	 Dcomp;
 | 
				
			||||||
 | 
					   bit [63:0] 	 Qcomp;
 | 
				
			||||||
 | 
					   bit [63:0] 	 Rcomp;   
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   logic [7:0] 	 count [0:15];   
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   int64div dut (Q, done, divdone, rem0, div0, N, D, clk, reset, start);
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   initial 
 | 
				
			||||||
 | 
					     begin	
 | 
				
			||||||
 | 
						clk = 1'b0;
 | 
				
			||||||
 | 
						forever #5 clk = ~clk;
 | 
				
			||||||
 | 
					     end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   initial
 | 
				
			||||||
 | 
					     begin
 | 
				
			||||||
 | 
						handle3 = $fopen("iter64.out");
 | 
				
			||||||
 | 
						#8000000 $finish;		
 | 
				
			||||||
 | 
					     end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   always @(posedge clk, posedge reset)
 | 
				
			||||||
 | 
					     begin
 | 
				
			||||||
 | 
						desc3 = handle3;	
 | 
				
			||||||
 | 
						#0  start = 1'b0;
 | 
				
			||||||
 | 
						#0  reset = 1'b1;
 | 
				
			||||||
 | 
						#30 reset = 1'b0;	
 | 
				
			||||||
 | 
						for (i=0; i<2; i=i+1)
 | 
				
			||||||
 | 
						  begin
 | 
				
			||||||
 | 
						     N = $random;
 | 
				
			||||||
 | 
						     D = $random;
 | 
				
			||||||
 | 
						     start <= 1'b1;
 | 
				
			||||||
 | 
						     // Wait 2 cycles (to be sure)
 | 
				
			||||||
 | 
						     repeat (2)
 | 
				
			||||||
 | 
						       @(posedge clk);
 | 
				
			||||||
 | 
						     start <= 1'b0;	     
 | 
				
			||||||
 | 
						     repeat (41)
 | 
				
			||||||
 | 
						       @(posedge clk);
 | 
				
			||||||
 | 
						     Ncomp = N;
 | 
				
			||||||
 | 
						     Dcomp = D;
 | 
				
			||||||
 | 
						     Qcomp = Ncomp/Dcomp;
 | 
				
			||||||
 | 
						     Rcomp = Ncomp%Dcomp;	     
 | 
				
			||||||
 | 
						     $fdisplay(desc3, "%h %h %h %h || %h %h || %b %b", 
 | 
				
			||||||
 | 
							       N, D, Q, rem0, Qcomp, Rcomp, 
 | 
				
			||||||
 | 
							       (Q==Qcomp), (rem0==Rcomp));
 | 
				
			||||||
 | 
						  end // for (i=0; i<2, i=i+1)	
 | 
				
			||||||
 | 
					     end 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					endmodule // tb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -48,6 +48,16 @@ module muldiv (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      mul mul(.*);
 | 
					      mul mul(.*);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (WIDTH==32) begin
 | 
				
			||||||
 | 
					        divide4x32 div(.clk(clk), .reset(reset), 
 | 
				
			||||||
 | 
					                       .N(SrcAE), .D(SrcBE), .Q(QuotE), .rem0(RemE),
 | 
				
			||||||
 | 
					                       .start(), .div0(), .done(), .divone());
 | 
				
			||||||
 | 
					      end else begin // WIDTH=64
 | 
				
			||||||
 | 
					        divide4x64 div(.clk(clk), .reset(reset), 
 | 
				
			||||||
 | 
					                       .N(SrcAE), .D(SrcBE), .Q(QuotE), .rem0(RemE),
 | 
				
			||||||
 | 
					                       .start(), .div0(), .done(), .divone());
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
      // Select result
 | 
					      // Select result
 | 
				
			||||||
      always_comb
 | 
					      always_comb
 | 
				
			||||||
        case (Funct3E)
 | 
					        case (Funct3E)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user